- 我们每天都在用 pip install <package_name>。
- 默认会去官方的PyPI源下载,不过可以通过修改Linux或者macOX上的用户家目录下的文件 ~/.pip/pip.conf
[global]
timeout=600
index-url = http://pypi.doubanio.com/simple
trusted-host = pypi.doubanio.com
- 我们每天都在用 pip install <package_name>。
- 默认会去官方的PyPI源下载,不过可以通过修改Linux或者macOX上的用户家目录下的文件 ~/.pip/pip.conf
[global]
timeout=600
index-url = http://pypi.doubanio.com/simple
trusted-host = pypi.doubanio.com
# setup.py (打包和安装)
- 打包的逻辑是指定那些文件需要被打到包里
- 安装的逻辑是把包以及其依赖包安装到当前python环境的site-pakcges中,并且把可执行文件放到对应的bin目录下
只是执行了Python提供的setup函数而已
- packages
指明要打入的包
package=find_packages('Django企业开发实战') # 也可以写成
package=['config','config.migrations','blog.middleware'...] # 所有的目录名
# 但是自己写太麻烦,因此使用上面的写法
- package_dir
指明上面的包都在哪个目录下,如果在setup.py的同级目录,则可以不用写
- package_date
指明除了.py文件外,还需要打包那些文件到最终的安装包里。
对应的值需要是字典格式,key标识要查找的目录,value是list结构,表示要查找的具体文件,支持通配符的格式
如果key为空,表示要查找所有包。比如我们需要打包Javascript文件,其所在位置为 Django企业开发实战/static/js/post_editor.js,因为开头的Django企业开发实战是包名,所以从static开始,需要每一级目录
- include_package_data
和package_date功能一致,但依赖MANIFEST.in文件
实例配置:
# 指定要加入的文件或者多个文件,以空格分开
include README.md
# 递归查找Django企业开发实战下面所有对应各式的文件
recursive-include Django企业开发实战 *.css *.js *.jpg *.html *.md
- install_requires
指明依赖版本,安装项目时,先安装依赖,也就是这一项配置
- extras_requires
额外的依赖, pip install 'Django企业开发实战[ipython]' 这样会同时安装ipytho这个包
- scripts
指明要放到bin目录下的可执行文件,这里把项目的manage.py放进去,
路径为: Django企业开发实战/manage.py
相对setup.py来说,然后可以通过manage.py runserver 启动项目
- entry_points
入口点
console_scripts 用来生成一个可执行文件到bin目录下。 名字叫: Django企业开发实战_manage(执行此命令,就相当于执行了manage.py 中的main方法;前提是有main方法)
- classifiers
说明项目的当前状况
# 配置完上面
python setup.py sedit
或者
python setup.py bdist_wheel
- sedit
source distribution 源码分发,打包之后是以.tar.gz结尾的
当用pip 安装时,还需要build阶段,也就是会执行 python setup.py install
- bdist_wheel
wheel格式(zip),以.whl结尾。 包含了文件和原数据,安装时只需要移到对应的位置就可以了
可以通过unzip 来解压
其优点:
1、可以更快地安装纯python的使用原生C扩展的包
2、避免安装过程中执行任意代码(避免执行setup.py)
3、C扩展的安装不需要再Win macOX上编译
4、给测试和持续集成提供更好地缓存
5、在暗黄期间创建pyc文件,确保这些文件跟当前使用的python解释器匹配
6、在多平台上具有更加一致的安装过程
- pythonwheels.com
- 指明生成的包适用于python的那个版本
--universal 表明所有版本都可用
--python-tag py36
除了直接在命令行增加参数外,还可以通过文件的方式配置。
setup.cfg
[bdist_wheel]
python-tag = py36
#universal=0 # 仅限当前运行的python版本2或者3
#universal=1 # 2和3通用
# 最终通过 python setup.py sdist bdist_wheel upload -r internal 上传到PyPI服务器
# 配置内部PyPI服务器
- 服务端
- 方法1
pip install pypiserver
pypi-server -p 18080 -P /opt/mypypi/ .hatacess /opt/mypypi/packages
-p 端口号
-P 认证文件
最后一个是上传的包存放目录
.hatacess 是使用Apache的一个工具生成的,
yum install httpd-tools
htpasswd -sc /opt/mypypi/ .hatacess user_name # 这一步会让你输入密码。
- 方法2
使用devpi,功能更强大
- 客户端
在用户家目录下增加.pypirc文件
[distutils]
index-servers =
internal
[internal]
repository: http://127.0.0.1:18080/
username: user_name
password: *****