什么是 setup.py
以及如何配置或使用?
原文由 Software Enthusiastic 发布,翻译遵循 CC BY-SA 4.0 许可协议
什么是 setup.py
以及如何配置或使用?
原文由 Software Enthusiastic 发布,翻译遵循 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_description
在 pypi.org 中用作包的自述文件描述。
最后,您现在已准备好将您的包上传到 PyPi.org ,以便其他人可以使用 pip install yourpackage
安装您的包。
此时有两种选择。
一旦您的包名称在 pypi.org 中注册,就没有人可以声明或使用它。 Python 打包建议使用 twine 包 用于上传目的(将您的包上传到 PyPi)。因此,
# prereq: wheel (pip install wheel)
$ python setup.py sdist bdist_wheel
twine
上传到 test.pypi.org
或 pypi.org
: $ twine upload --repository testpypi dist/*
username: ***
password: ***
包出现在 test.pypi.org
上需要几分钟时间。一旦你对它感到满意,你就可以将你的包上传到 pypi.org 的真实和永久索引,只需使用:
$ twine upload dist/*
或者,您也可以通过以下方式使用 GPG
对包中的文件进行签名:
$ twine upload dist/* --sign
额外阅读:
在此处查看来自真实项目的示例 setup.py
: torchvision-setup.py
原文由 kmario23 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
setup.py
是一个 python 文件,它的存在表明您要安装的模块/包可能已经使用 Distutils 打包和分发,这是分发 Python 模块的标准。这使您可以轻松安装 Python 包。通常写下就足够了:
pip
将使用setup.py
安装您的模块。避免直接调用setup.py
。https://docs.python.org/3/installing/index.html#installing-index