如何发布自己的python包到pypi

如何发布自己的python包到pypi

环境依赖

  • setuptools
  • twine
  • build

以上环境通过pip install 进行安装。

项目配置

确保你的项目目录结构中存在如下文件:

│  LICENSE
│  README.md
│  setup.py

README.md文件可用于最终展现在pypi项目主页的介绍。

核心的配置在于setup.py, 当然也可以配置pyproject.tomlsetup.cfg达到相同的效果。 本文仅仅针对如何配置setup.py进行展开, 首先给个模板:

from setuptools import setup
from setuptools import find_packages

with open("README.md", "r", encoding="utf-8") as f:
  long_description = f.read()

setup(name='包名称, 也就是pip install的名称',
      version='版本号',
      description='简单描述',
      long_description=long_description,
      long_description_content_type='text/markdown',
      author='作者',
      author_email='作者邮件',
      keywords="关键字, 逗号分割",
      url='项目主页, 通常为github',
      install_requires=[
        "enum34;python_version<'3.4'",
        "numpy"
      ],
      packages=find_packages(where="src"),
      package_dir={"": "src"},
      #include_package_data = True,
      package_data={
        "pytsdk.libs":["*.dll", "*.ini"]
      },
      platforms=["Windows"],
      license='MIT License',
      classifiers=[
        'Development Status :: 4 - Beta',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: MIT License',
        'Operating System :: Microsoft :: Windows',
        'Natural Language :: Chinese (Simplified)',
        'Programming Language :: Python :: 3',
        'Topic :: Software Development :: Libraries :: Python Modules'
      ],
)

基本配置如上, 需要格外关注的几个点为:

  • long_description_content_type需要调整为text/markdown, 默认为text/x-rst
  • install_requires列表填写当前包依赖的第三方库, 当pip安装当前包时, 会按照这个列表中的依赖。上述的enum34;python_version<'3.4'表示只有当python版本低于3.4时才会安装enum34这个包。 同时可以通过Package-A @ git+https://example.net/package-a.git@main这种形式指定链接。详情参考dependency management
  • packages该项目所需所有源码, 通过方法find_packages进行查找, where参数指定查找目录。确保每个python或数据目录下都存在__init__.py文件, 否则find_package无法找到
  • include_package_data设置为True, 保证find_packages时会自动搜索数据文件。 另一种方式是通过package_data手动指定。 这里需要特别注意的是目录路径问题。否则运行时出现找不到数据文件的问题。示例中因为dll在pysdk/libs这个目录下, 所以指定key为pysdk.libs。
  • classifiers可以从https://pypi.org/classifiers选择

生成部署包

部署包分为两种:

  • source distributions,sdists
  • binary distributions,wheels

生成方式有两种:

  1. python setup.py

    生成whl:

    python setup.py bdist_wheel
    

    生成sdists

    python setup.py sdist
    

    通过python setup.py --help-commands可查看更多选项, 比如需要编译则需要添加build选项

  2. 安装build, 通过build命令进行生成

    首先安装build: pip install build

    生成whl:

    python -m build --wheel
    

    生成sdists

    python -m build --sdist
    

部署包都会生成在当前目录的dist目录中, sdists形式生成的是压缩包.tar.gz, wheel形式生成的时.whl文件。

上传到pypi

  1. 首先要在https://pypi.org/account/register/上注册账号。
  2. 然后安装pip install twine.
  3. 检查部署包twine check dist/*
  4. 没报错则通过twine upload dist/*进行上传, 输入API token回车即可

保存API token到用户目录的.pypirc文件中, 避免每次上传都输入token:

[pypi]
username = __token__
password = <the token value, including the `pypi-` prefix>

建议在上传之前自己pip install xxx.whl测试一下,没有问题再上传,因为但凡上传到了pypi就无法修改,只能删除或者修改版本号再上传。 或者通过TestPyPI测试通过之后再上传的pypi。详情参考using testpypi

参考

posted @ 2024-08-06 20:15  汗牛充栋  阅读(14)  评论(0编辑  收藏  举报