什么是 setup.py?

新手上路,请多包涵

什么是 setup.py 以及如何配置或使用?

原文由 Software Enthusiastic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 723
2 个回答

setup.py 是一个 python 文件,它的存在表明您要安装的模块/包可能已经使用 Distutils 打包和分发,这是分发 Python 模块的标准。

这使您可以轻松安装 Python 包。通常写下就足够了:

 $ pip install .

pip 将使用 setup.py 安装您的模块。避免直接调用 setup.py

https://docs.python.org/3/installing/index.html#installing-index

原文由 Silfverstrom 发布,翻译遵循 CC BY-SA 4.0 许可协议

它有助于在您的机器上安装 python 包 foo (也可以在 virtualenv 中),以便您可以导入包 foo 项目[I]Python 提示。

它做类似的工作 pip , easy_install 等等,


使用 setup.py

让我们从一些定义开始:

- 包含 __init__.py 文件的文件夹/目录。 模块- 扩展名为 .py 的有效 python 文件。 _分布_——一个 如何与其他 模块 相关。

假设您要安装名为 foo 的包。然后你做,

 $ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install

相反,如果您不想实际安装它但仍想使用它。然后做,

 $ python setup.py develop

此命令将在站点包中创建指向源目录的符号链接,而不是复制内容。因此,它非常快(特别是对于大包)。


创建 setup.py

如果你有你的包树,

 foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

然后,在 setup.py 脚本中执行以下操作,以便它可以安装在某些机器上:

 from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.example',
   packages=['foo'],  #same as name
   install_requires=['wheel', 'bar', 'greek'], #external packages as dependencies
)

相反,如果您的包树更复杂,如下所示:

 foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

然后,你的 setup.py 在这种情况下就像:

 from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.example',
   packages=['foo'],  #same as name
   install_requires=['wheel', 'bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)


添加更多内容到 ( setup.py ) 并让它变得体面:

 from setuptools import setup

with open("README", 'r') as f:
    long_description = f.read()

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   license="MIT",
   long_description=long_description,
   author='Man Foo',
   author_email='foomail@foo.example',
   url="http://www.foopackage.example/",
   packages=['foo'],  #same as name
   install_requires=['wheel', 'bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

long_descriptionpypi.org 中用作包的自述文件描述。


最后,您现在已准备好将您的包上传到 PyPi.org ,以便其他人可以使用 pip install yourpackage 安装您的包。

此时有两种选择。

  • 发布在 临时test.pypi.org 服务器上让自己熟悉程序,然后发布在 永久pypi.org 服务器上供公众使用你的包。
  • 如果您已经熟悉该过程并拥有您的用户凭据(例如,用户名、密码、包名称),请立即在 永久性 pypi.org 服务器上发布

一旦您的包名称在 pypi.org 中注册,就没有人可以声明或使用它。 Python 打包建议使用 twine 用于上传目的(将您的包上传到 PyPi)。因此,

  1. 第一步是使用以下方法在本地 构建 发行版:
    # prereq: wheel (pip install wheel)
   $ python setup.py sdist bdist_wheel

  1. 然后使用 twine 上传到 test.pypi.orgpypi.org
    $ twine upload --repository testpypi dist/*
   username: ***
   password: ***

包出现在 test.pypi.org 上需要几分钟时间。一旦你对它感到满意,你就可以将你的包上传到 pypi.org 的真实和永久索引,只需使用:

 $ twine upload dist/*

或者,您也可以通过以下方式使用 GPG 对包中的文件进行签名:

 $ twine upload dist/* --sign


额外阅读

原文由 kmario23 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题