setup.py脚步的用途之一是充当可执行文件,你可以运行它来打包软件并将其上传到发布服务器上。
编写自己的自定义模块,并且希望能够开源的话,打包自己的项目是必须的。而打包的必要条件是在你的项目里面有可执行的setup.py。
其他重要的参数包括:
1)、packages
告诉Distutils需要处理那些包(包含init.py的文件夹)
2)、package_dir
告诉Distutils哪些目录下的文件被映射到哪个源码包,感觉好像是一个相对路径
的定义。一个例子:package_dir = {”: ‘lib’},表示以lib为主目录。
3)、ext_modules
是一个包含Extension实例的列表,Extension的定义也有一些参数。
4)、ext_package
定义extension的相对路径
5)、requires
定义依赖哪些模块
6)、provides
定义可以为哪些模块提供依赖
7)、scripts
指定python源码文件,可以从命令行执行。在安装时指定–install-script
8)、package_data
通常包含与包实现相关的一些数据文件或类似于readme的文件。
如果你希望将自己包上传到PyPI,也就是任何人都能通过pip install安装你的包的话,需要注册并打包上传。操作步骤如下:
1)在PyPI网站注册
登录https://pypi.python.org/pypi。并注册一个账户
2)配置
配置 .pypirc文件,该文件应该位于您的主目录(根据操作系统的不同而有所变化)中。典型的 .pypirc 文件如下:
[distutils]
index-servers =
pypi
[pypi]
username:xxxxxxxxxxxxx
password:xxxxxxxxxxxxx
3)执行注册
python setup.py register
4)打包上传
python setup.py sdist upload
如果你并不需要上传到pypi。那只要在你包里包含setup.py的路径下,执行:
python setup.py sdist。然后,在当前目录下,会创建dist目录,里面有个压缩文件名,这个就是可以分发的包。使用者拿到这个包后,解压后,执行python setup.py install,就会安装成功。
setup.py和pip
表面上,python setup.py install和pip install都是用来安装python包的,实际上,pip提供了更多的特性,更易于使用。体现在以下几个方面:
• pip会自动下载依赖,而如果使用setup.py,则需要手动搜索和下载;
• pip会自动管理包的信息,使卸载/更新更加方便和容易,使用pip uninstall即可。而使用setup.py,必须手动删除,有时容易出错。
• pip提供了对virtualenv更好的整合。
_init_.py
不管是打包,还是导入包,对应的包(路径)下面都必须有一个init.py文件。
init.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的init.py文件。我们可以再init.py文件中再导入其他的包,或者模块。
这样,当我们导入这个包的时候,init.py文件自动运行。帮我们导入了这么多个模块,我们就不需要将所有的import语句写在一个文件里了,也可以减少代码量。不需要一个个去导入module了。
init.py 中还有一个重要的变量,叫做 all。我们有时会使出一招“全部导入”,也就是这样:
from PackageName import *
这时 import 就会把注册在包 init.py 文件中 all 列表中的子模块和子包导入到当前作用域中来。比如:
all = [“Module1”, “Module2”, “subPackage1”, “subPackage2”]