Python3快速入门(四)Python包管理

1、Python包简介

一、包

Python中使用包管理模块,包一般对应一个目录,必须在目录下建立一个init.py模块,init.py模块的模块名称即为包名,Python才会将目录解析为包。python

init.py文件内能够定义初始化包的内容,导入包的内容,限制包内模块的导出。mysql

init.py文件能够为空,也能够是一个模块,其模块名称为包名称。sql

导入包或包的模块、变量、函数时,init .py文件会被自动执行。shell

二、模块

Python中一个.py文件就是一个模块。服务器

Python 中用 import 或者 from...import 来导入相应的模块。ide

将整个模块(somemodule)导入,格式为: import somemodule函数

从某个模块中导入某个函数或变量,格式为: from somemodule import somefunction工具

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc学习

将某个模块中的所有函数或变量导入,格式为:from somemodule import *开发工具

在学习过程当中有什么不懂得能够加个人
python学习资源qun,855-408-893
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容

import sys

print('================Python import module==========================')

print('命令行参数为:')

for i in sys.argv:

    print(i)

print("python 路径为", sys.path)

from sys import argv, path  # 导入特定的成员

print('================python from import===================================')

print(argv)

print(path)

对导入的模块进行重命名

Import package.module as name

import导入包或模块时,若是导入模块较多须要换行,可使用反斜杠,或是将使用小括号将包含全部的模块。

包和模块不会被重复导入。

三、模块的内置变量

模块内部预约义了内置变量:

name :当前模块名称

package :当前模块所属包的名称

doc :当前模块的注释内容

file :当前文件

# -*- coding:utf-8 -*-

print("name: " + __name__)

print("package: " + (__package__ or "当前模块不属于任何包"))

print("doc: " + (__doc__ or "当前模块没有任何注释"))

print("file: " + __file__)

# name: __main__

# package: 当前模块不属于任何包

# doc: 当前模块没有任何注释

# file: test.py

若是某个文件被看成入口文件,内置变量package 没有值,name 值为maindoc file 值为文件名称(不含路径)。

每一个模块均可以任意写一些没有缩进的代码,而且在载入时自动执行,为了区分模块是主执行文件仍是被调用的模块文件,Python引入了一个变量name,当文件是被调用时,name的值为模块名,当文件做为入口被执行时,name为'main'。所以,能够在每一个模块中写上测试代码,测试代码仅当模块被Python直接执行时才会运行,代码和测试结合在一块儿,完美实现对测试驱动开发(TDD)的支持。

if __name__ == "__main__":

    function_name()

将一个模块文件做为模块执行而不是应用执行的命令以下:

python3 -m package.module

2、Python包管理

一、导入包和模块

import只能导入包和模块,不能直接导入变量或者函数。对于多层包嵌套后致使导入名称过长,能够为其重命名。

import package1.package2.module_name

import package1

import package1.module_name

import package1.package2.module_name as new_name

导入包和模块时须要避免循环导入,两个或者多个模块文件互相导入会报错。

Python在导入模块时,会执行模块里的全部内容,但屡次导入只会执行一次。

Import导入包或模块时,Python 解释器寻找模块的优先级以下:

A、当前目录

B、环境变量PYTHONPATH

C、sys.path(list 类型)

模块在被导入执行时,Python解释器为加快程序的启动速度,会在与模块文件同一目录下自动生成.pyc文件,.pyc是通过编译后的字节码。

Python使用缩进对齐组织代码的执行,全部没有缩进的代码(非函数定义和类定义),都会在载入时自动执行。

二、导入变量和函数

导入某个模块的变量,多个使用逗号分隔

from package1.package2.module_name import variable_name

导入某个模块的函数,多个使用逗号分隔

from package1.package2.module_name import function_name

导入某个包的某个模块,多个使用逗号分隔

from package1 import module_name

导入模块的全部变量和函数

from package1.module_name import *

在模块内使用内置all属性指定本模块能够导出的变量或函数,外部导入只能使用指定的变量或函数。

在模块(*.py)中使用导出all列表里的类、函数、变量等成员,不然将导出全部不如下划线开头(私有)的成员,在模块中使用all属性可避免在相互引用时的命名冲突。

#!/usr/bin/python3

__all__ = ["variable1", "variable2", "function_name1", "function_name2"]

variable1 = 0

variable2 = 0

def function_name1(args):

    pass

def function_name2(args):

    pass

在导入变量和函数时,若是变量和函数太多须要换行,则可使用反斜杠换行或是使用小括号修饰多个变量或函数。

from package1.module_name import variable1, variable2 \

    variable3, function_name1

from package1.module_name import (variable1, variable2,

                                  function_name2, function_name2)

三、顶级包

顶级包与入口文件 main.py 的位置有关,与 main.py 同级的包是顶级包,所以main.py入口文件不属于任何包。

四、相对导入

相对导入是导入模块时指定被导入模块名称的相对路径。

import 不支持相对导入,只能使用 from ... import ... 格式实现相对导入,

“ . .. ... ” 来表示相对路径,一个点表示当前包,两个点表示上一级包,以此类推。

入口文件中没有包的概念,所以不能使用相对导入。

使用相对导入不要超出顶级包,入口文件同级的包都不能使用相对导入。

在main.py若是做为模块执行时,可使用相对导入,此时使用以下命令执行:

python3 -m main.py

五、绝对导入

绝对导入是导入时必须指定从顶级包到被导入模块名称的完整路径,可使用import 和 from ... import ...进行导入。

六、init.py模块

init.py文件存在包的根目录下,当包或者包中的任意模块或模块中变量、函数被导入时,init.py中内容会首先自动被执行。所以,init.py文件能够实现以下应用:

A、限制本包的模块导入

init.py中写入内置函数all,决定哪些模块能够被外部导入。

__all__ = ["module_name1", "module_name2"]

B、批量导入

若是包内多个模块文件都须要用到某些模块文件时,能够在包的init.py文件中导入须要的模块文件,而后就能够在本包不一样的模块文件中直接使用导入的模块 。

3、Python项目结构

一、Python文件结构

一般,Python文件结构以下:

#!/usr/bin/python3

# 模块文档

"""

    This is an example.

"""

# 模块导入

import sys

import os

# 定义全局变量

debug = True

# 定义类

class class_name:

    pass

# 定义函数

def function_name():

    pass

# 主程序

if __name__ == "__main__":

    function_name()

二、Python项目目录结构

一般,Python项目的目录结构以下:

README:项目说明文档。

bin(scripts):存放项目的可执行脚本。

project_name:存放项目的全部源代码,程序的入口文件最好命名为main.py。

docs: 存放项目文档。

tests:测试代码目录。

extras:项目扩展部分,不属于项目必需的部分,存放与项目相关的sample、poc,一般子目录以下dev_example、production_example、test1_poc、test2_poc。

setup.py:项目安装、部署、打包的脚本。

requirements.txt:存放软件依赖的外部Python包列表。

README:项目说明文件。

LICENSE.txt:版权声明

ChangeLog.txt:版本变动日志记录

AUTHORS:做者清单

INSTALL:安装说明

MANIFEST.in:装箱清单文件

MAKEFILE:编译脚本

4、pipenv包管理工具

一、pipenv简介

Python项目开发中,在开发需求完成并测试好后,须要发布到正式服务器,此时会面临环境依赖问题。Python项目可能会有多个第三方模块包,而且可能会有版本约束问题,所以须要一个虚拟环境,在虚拟环境里面模拟出跟服务器相同的环境。

pipenv ,全称为Python Development Workflow for Humans,旨在为开发项目自动建立和管理虚拟环境并管理 Python 包,是virtualenv 和pip的合集,经过建立指定python版本的虚拟环境和安装依赖包,提供各个项目隔离的开发环境。

二、pipenv安装

对于Python3,安装命令以下:

pip3 install pipenv

安装结果查看:

pipenv –version

三、pipenv经常使用命令

pipenv --three

pipenv -- two

pipenv --python 3.x.x

pipenv --python 2.x.x

建立虚拟环境,并指定Python版本

pipenv shell从系统环境切换到虚拟环境

pipenv install xxxx在虚拟环境安装软件包

exit退出虚拟环境

pipenv uninstall [module_name] 删除Python包

pipenv --rm删除虚拟环境

pipenv --where 列出本地工程路径

pipenv --venv 列出虚拟环境路径

pipenv --py 列出虚拟环境的Python可执行文件

pipenv install 建立虚拟环境

pipenv install [moduel] 安装包

pipenv install [moduel] --dev 安装包到开发环境

pipenv uninstall [module] 卸载包

pipenv graph 查看包依赖

pipenv lock 生成lockfile

pipenv run python [pyfile] 运行py文件

pipenv uninstall --all 卸载所有包并从Pipfile中移除

四、更换源

pipenv默认的Pipfile 文件中指定使用官方源锁定依赖,会致使速度过慢,解决方案天然是更换国内源,经常使用国内源以下:

阿里云:http://mirrors.aliyun.com/pypi/simple/

清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/

中国科学技术大学:https://pypi.mirrors.ustc.edu.cn/simple/

源更换须要将Pipfile 文件中url的值替换为国内源。

在学习过程当中有什么不懂得能够加个人
python学习资源qun,855-408-893
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容

[[source]]

name = "pypi"

url = "http://mirrors.aliyun.com/pypi/simple/ "

verify_ssl = true

[dev-packages]

[packages]

pymysql = "*"

pymango = "*"

mysql-connector = "*"

mysqldb = "*"

mysql-python = "*"

[requires]

python_version = "3.7"