__init__.py
,这个目录下一定有 __init__.py
文件和其他模块或子包安装Python之后,自动安装好的一些系统模块,可以直接导入使用。每一个安装Python的用户电脑上都有这个模块,满足了基本的开发需求。
在Python中有一些预制的模块,就是存放在builtin模块中,在Python 3中存放在builtins 模块中。比如说print函数就是属于这个预制模块中的。
非系统自带安装模块,属于第三方开发人员开发的,需要下载和安装才可以使用。
我们自己开发的一些包和模块,发布出去给别人用。
当我们使用Python的编译器工具,比如Pycharm时,我们导入一个包,把鼠标放在这个导入的模块上,就会出现这个模块或者包存放的位置。
或者使用print(os.__file__)
dir(XXX)
查看到这个模块所在的位置,其中XXX表示的待查看的模块的名字。
模块的导入
单个模块的导入 import M
多个模块的导入 import M1, M2
导入的时候取一个别名 import M as 别名
包的导入,不能直接 import package_name , 如果直接导入一个包,整个包不会被完全导入,只会导入了__init__.py 这一个初始文件
单个包的导入 import package.M
多个模块的导入 import p1.M1, p2.M2
导入的时候取一个别名 import p1.M as 别名
导入包的时候还可以借助于from 语句, from A import B[as c]
引入单个模块
from p1 import M1
引入这个包的多个模块
from p1 import M1, M2
引入时起别名
from p1 import M1 as mm1, M2 as mm2
假设我们自己开发了一个软件包,并且我们要发布我们的软件包到pypi仓库上去,我们需要构建一个项目,这个项目的结构如下所示:
在这里我们的setup.py是写了项目信息的配置文件,这里面有一个执行函数,通过这个函数来知名信息。写setup函数的方式有两种
除此之外还有需要处理的单文件模块列表
作者信息
作者邮箱
长描述
依赖的其他包
可以查看广泛文档 Packaging and Distributing
在setup.py文件中,我们可以设置如下信息:
# from distuils.core import setup # 这两个打包方式二选一
from setuptools import setup
setup(name="abc",version="1.0.1",description="this is a package description", package=['pa','pb'],py_modules=['tool'],author='green grape',author_email='[email protected]',long_description="XXXX", url="https://github.bighug")
写好我们的设置文件之后,我们可以通过如下的命令来发布我们的package。
python3 setup.py sdist
按照这样一个打包命令生成的包是一个源码包,这个源码包 生成的格式如下:abc-1.0.1.tar.gz 这里的命名规则和你在setup中的配置是一样的
除了上面这些信息,我们在打包文件中还有一些文件叫做README.rst 文件。这个文件可以使用特定的字符来描述文本的格式。pypi平台能够自动识别long_description字段所写的这种格式的字符串。
但是,如果把字符串都写在setup函数参数中,会显得比较混乱,所以,一般把内容写在一个单独的README.rst文件中,然后在setup.py文件中读取这个文件的命令,赋值给我们的long_description即可。
这个README.rst文档支持格式是与markdown格式编辑一样的,rst 表示的是reStructuretext 格式。
这个文件的作用就是防止setup传入的参数太长,影响整个文件的可读性。
因此针对setup.py 这个文件我们可以这么处理:
from distuils.core import setup
from setuptools import setup
# 定一个参数读取readme.rst这个文件
def readme_file():
with open("README.rst",encoding='utf-8') as rf:
return rf.read()
setup(name="abc",version="1.0.1",description="this is a package description", package=['pa','pb'],
py_modules=['tool'],author='green grape',author_email='[email protected]',long_description=readme_file(),
url="https://github.bighug")
注意,我们把readme.rst文件和 setup.py放在同一个目录下面
在这里我们可以安装一个包来检测我们写的README.rst的语法写的对不对
具体的命令是:
pip install readme_renderer
安装好之后,我们可以进入到我们打包的文件的目录当中
然后运行下面的命令,可以检查我们写的README.rst文件对不对。
python setup.py check -r -s
也可以通过比如说 pycharm中的运行文件,生成html之后能够生成对应的文本,在浏览器中打开,查看运行之后文本结果
用于申明库的一些使用责任等等,所有归属权,别人是否能够对代码进行操作。
我们也可以在setup.py 这个文件里面的setup函数里面字段申明我们使用 的许可证类型
# from distuils.core import setup
from setuptools import setup
# 定一个参数读取readme.rst这个文件
def readme_file():
with open("README.rst",encoding='utf-8') as rf:
return rf.read()
setup(name="abc",version="1.0.1",description="this is a package description", package=['pa','pb'],
py_modules=['tool'],author='green grape',author_email='[email protected]',long_description=readme_file(),
url="https://github.bighug", license="MIT")
在我们使用打包命令的时候,会把readme文件放到我们的压缩包,但是license这个文件可能就不会被放到压缩包里面。如果我们需要在打包的时候在我们发布的包中存放我们需要的文件,我们就需要利用到我们的MANIFEST文件来控制我们生成的打包文件的清单。
如果是使用的时候,我们使用的setuotool会自动帮你把readme打包进去,如果使用的打包工具是distutils 那么就需要我们在MANIFEST文件中写如readme
MANIFEST.in 的构建格式如下所示:
include LICENSE
include README.rst
include *.txt
我们在发布包的时候,如果是发布源码包,这个时候生成发布包的命令如下:
python setup.py sdist
这样生成的包是一个固定的打包格式,tar.gz
当然我们还可以用参数 --format = 压缩格式选项生成不同的压缩包格式
比如说常见的压缩包格式: zip, gztar,ztar, tar, bztar等
python setup.py sdist --format=zip,tar
在这里,s表示的是源码 source, 表示的是发布包的形态是源码形态的
python setup.py bdist
表示的是会把源码包编译成为一个二进制包
生成的二进制文件都放在__pycache__ 文件夹下面
除此之外,我们还有一些其他的命令
python setup.py bdist_egg # 要使用egg的包我们需要安装setuptool
python setup.py bdist_wheel # pip install wheel
python setup.py bdist_wininst # windows下的安装环境运行的包
针对二进制的包,我们是直接解压缩之后把里面的内容复制到我们安装包目录中的Lib下面的site-packages这个里面接可以了
针对使用 python setup.py bdist_wininst # windows下的安装环境运行的包 生成的exe文件,在Windows的环境下可以直接双击运行,
和一般的软件安装的步骤是一致的或者说类似。
针对下载下来的egg的包我们可以通过 easy_install XXX.egg去安装完成
针对我们下载的.whl格式的包,我们可以通过easy_install XXX.whl这样的一个格式去安装,也可以通过 pip install XXX.whl 去安装
如果我们开发了一个工具包,并且想将其上传到Pypi仓库,这个时候我们可以借助twine 这个库
使用下面这个命令我们就可以上传
twine upload XXX # XXX 代表我们需要上传的包
当然,安装的时候还可以指定安装的源,可以是来自于pypi官方仓库,也可以指定镜像仓
pip install XX --index-url https;//pypi.python.org/simple
简化版本如下
pip install XX -i https;//pypi.python.org/simple
[1] https://www.bilibili.com/video/BV194411r7a8?p=1&vd_source=57623809cb42c86b58d359b44bfd8dcf
[2] https://mermaidjs.github.io/
[3]:https://mermaidjs.github.io/
[4]: http://adrai.github.io/flowchart.js/