python发布到pip仓库

和java的maven一样,python也有自己的中央仓库https://pypi.org/,也是按照相似的方式来打包项目的,maven靠的pom.xml,而Python靠的是setup.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python
# coding=utf-8

from setuptools import setup

'''
把redis服务打包成C:\Python27\Scripts下的exe文件
'''

setup(
name="RedisRun", #pypi中的名称,pip或者easy_install安装时使用的名称,或生成egg文件的名称
version="1.0",
author="Andreas Schroeder",
author_email="andreas@drqueue.org",
description=("This is a service of redis subscripe"),
license="GPLv3",
keywords="redis subscripe",
url="https://ssl.xxx.org/redmine/projects/RedisRun",
packages=['RedisRun'], # 需要打包的目录列表

# 需要安装的依赖
install_requires=[
'redis>=2.10.5',
'setuptools>=16.0',
],

# 添加这个选项,在windows下Python目录的scripts下生成exe文件
# 注意:模块与函数之间是冒号:
entry_points={'console_scripts': [
'redis_run = RedisRun.redis_run:main',
]},

# long_description=read('README.md'),
classifiers=[ # 程序的所属分类列表
"Development Status :: 3 - Alpha",
"Topic :: Utilities",
"License :: OSI Approved :: GNU General Public License (GPL)",
],
# 此项需要,否则卸载时报windows error
zip_safe=False
)

python的打包方式:

1
python setup.py sdist

python发布包的方式

1
python setup.py upload sdist

从私有仓库安装依赖

默认会将包发送到中央仓库,但是也是可以通过配置来使用私有仓库的

pip install的安装仓库在$HOME/.pip/pip.conf中指定,他的内容如下:

1
2
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

这里我们就将仓库设置成了清华的源,当然也可以设置为公司内部的私有仓库

1
2
[global]
index-url = https://username:passwd@xxx.com/simple

千万这里注意在url中带上身份信息,不然一直404,并且这里的账号和密码是被urlencode了的。

如果pip install失败了,想要看到失败原因,可以使用pip install -v来查看安装过程。

发布pip包到私有仓库

通过配置$HOME/.pypirc文件能够指定发布包的服务器地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[distutils]
index-servers =
pypi
pypitest

[pypi]
repository: https://upload.pypi.org/legacy/
username: your_username
password: your_password

[pypitest]
repository: https://test.pypi.org/legacy/
username: your_username
password: your_password

配置文件不必多说一看就懂,将包发布到pypitest仓库

1
python setup.py upload sdist  -r pypitest

将包发布到pypi仓库

1
python setup.py upload sdist  -r pypitest

更先进的deploy方式

python setup.py upload的方式简单好用,但是数据库传输未加密,所以有安全隐患,目前已经不再推荐使用了。现在推荐使用twine来发布pip包:

1
twine upload sdist/*