setup.py

  1. from setuptools import setup
  2. # or
  3. # from distutils.core import setup
  4. setup(
  5. name='demo', # 包名字
  6. version='1.0', # 包版本
  7. description='This is a test of the setup', # 简单描述
  8. author='huoty', # 作者
  9. author_email='sudohuoty@163.com', # 作者邮箱
  10. url='https://www.konghy.com', # 包的主页
  11. packages=['demo'], # 包
  12. )

选项备忘

package_dir

  1. package_dir = {'': 'foolib'}

键代表包名,空包名代表顶层包。在这个例子中,当你写入 packages = [‘foo’] 时,你其实是指 lib/foo/init.py 这个文件存在。

  1. package_dir = {'foo': 'lib'}

entry_points

用来构建命令行工具

  1. setup(
  2. entry_points={
  3. 'console_scripts': [
  4. 'foo = foo:cli'
  5. ]
  6. },
  7. )

foo里要有cli函数

cmd_class

“install_scripts”

find_packages

复杂工程可能由很多包,find_packages可以自动搜索,不用手动配置。

  1. find_packages(where='.', exclude=(), include=('*',))

package_data

不配置非.py的文件不会打包进去,别人pip install 会出现找不到文件错误。

  1. setup(
  2. package_data={
  3. "": ["*.toml"],
  4. }
  5. )

发布到PyPi

需要两个依赖

  1. pip3 install setuptools
  2. pip3 install wheel

项目目录下运行

  1. python3 setup.py sdist bdist_wheel

测试是否可以安装

  1. pip install dist/xxx.whl

上传PyPi

  1. pip install twine

上传

  1. twine upload dist/*

Home目录创建.pypirc

  1. [distutils]
  2. index-servers =
  3. pypi
  4. pypitest
  5. [pypi]
  6. username:
  7. password:
  8. [pypitest]
  9. repository: https://test.pypi.org/legacy/
  10. username:
  11. password: