什么是 setup.py?

2022-09-05 00:56:11

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


答案 1

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

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

$ pip install . 

pip将 用于安装您的模块。避免直接打电话。setup.pysetup.py

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


答案 2

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

它做类似的工作点easy_install等,


使用 setup.py

让我们从一些定义开始:

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

假设您要安装一个名为 的软件包。然后你做,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',
           ]
)

pypi.org 中用作包的自述文件说明。long_description


最后,您现在可以将软件包上传到 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
    
  2. 然后 用于上传到 或 :twinetest.pypi.orgpypi.org

    $ twine upload --repository testpypi dist/*
    username: ***
    password: ***
    

该包需要几分钟时间才会显示在 上。一旦你对它感到满意,你就可以把你的包上传到 pypi.org 的真实和永久索引,只需:test.pypi.org

$ twine upload dist/*

(可选)您还可以使用 by 对包中的文件进行签名:GPG

$ twine upload dist/* --sign

额外阅读