..

python发布到pip仓库

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

#!/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的打包方式:

python setup.py sdist

python发布包的方式

python setup.py upload sdist 

从私有仓库安装依赖

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

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

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

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

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

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

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

发布pip包到私有仓库

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

[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仓库

python setup.py upload sdist  -r pypitest

将包发布到pypi仓库

python setup.py upload sdist  -r pypitest

更先进的deploy方式

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

twine upload sdist/*