本文由 简悦 SimpRead 转码, 原文地址 www.cnblogs.com

使用setuptools创建项目

新建工作目录,把要发布的包放进去,并在工作目录中创建setup.py

from setuptools import setup, find_packages

setup(
    name = 'mylib',
    version = '0.0.1',
    description = 'just a simple test',
    license = 'MIT License',

    author = 'jim',
    author_email = '[email protected]',

    packages = find_packages(),
    platforms = 'any',

    # 表明当前模块依赖哪些包,若环境中没有,则会从pypi中自动下载安装!!!
    install_requires=['docutils>=0.3'],

    # setup.py 本身要依赖的包,这通常是为一些setuptools的插件准备的配置,这里列出的包,不会自动安装。
    setup_requires=['pbr'],

    # 仅在测试时需要使用的依赖,在正常发布的代码中是没有用的。
    # 在执行python setup.py test时,可以自动安装这三个库,确保测试的正常运行。
    tests_require=[
        'pytest>=3.3.1',
        'pytest-cov>=2.5.1',
    ],

    # 但是这些包通常不会使用到,只有当你深度使用模块时,才会用到,这里需要你手动安装
    extras_require={
        'PDF':  ["ReportLab>=1.2", "RXP"],
        'reST': ["docutils>=0.3"],
    }

    # 希望被打包的相对位置的文件
    package_data={'':['*.txt'],
        'bandwidth_reporter':['*.txt']},

    # 需要打包的位于固定位置的文件
    data_files=[('', ['conf/*.conf']),
        ('/usr/lib/systemd/system/', ['bin/*.service'])],
)

拉取依赖项的时候使用镜像站

直接在setup.py的同目录放置一个setup.cfg:

[easy_install]
index_url = https://pypi.tuna.tsinghua.edu.cn/simple

共享安装包到 PyPI 上

上面搞定了安装包在本地的安装,那么下面开始把 mylib 共享到 PyPI 上,那么肯定需要一个 PyPI 的帐号,这个自己去注册吧。
然后进入到刚刚生成的 mylib 的目录下,运行

python setup.py  register

在系统中填写我们在 PyPI 上注册的信息,包括用户名、密码,并把这个包名注册到 PyPI 上。(请确保 PyPI 上没有同名的包)
完成后再执行

python  setup.py sdist upload

将代码上传到 PyPI。

最后注意几点:

  1. 上传到 PyPI 上的包很有可能用 pip 或 easy_install 下载失败,提示 can not find a version satisfy request xxxxx. 原因是这个包生成的时候默认是当作 dev 的,所以不能 release,于是要自己手动修改它自动生成的配置文件 setup.cfg,把其中的 tag_build = dev 改成 tag_build =
  2. 经过试用后发现用 pastescript 生成的包符合 PyPI 的条件可以上传,但是它传上去的只是一个空的包,里面没有 mylib.py 这个文件,也许是需要用其他的参数生成包,而不是 basic_packge;而自己用 python setup.py sdist 生成的包则没有任何问题。

最简单的方法就是在生成包的时候使用 python setup.py sdist --formats=zip,gztar,这样上面两个问题都不存在了