协慌网

登录 贡献 社区

什么是 setup.py?

任何人都可以解释一下,什么是setup.py以及如何配置或使用它?

答案

setup.py是一个 python 文件,它通常告诉您要安装的模块 / 包已经与 Distutils 一起打包和分发,这是分发 Python 模块的标准。

这使您可以轻松安装 Python 包。通常它写得足够:

$ python setup.py install

并且模块将自行安装。

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

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

它完成了与pipeasy_install等类似的工作,


使用setup.py

让我们从一些定义开始:

- 包含__init__.py文件的文件夹 / 目录。
Module - 扩展名为.py有效 python 文件。
分发 - 一个与其他模块的关系

假设您要安装名为foo的包。那你呢,

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

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

$ python setup.py develop

此命令将为 site-packages 中的源目录创建符号链接,而不是复制内容。因此,它非常快(特别是对于大型包装)。


创建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.com',
   packages=['foo'],  #same as name
   install_requires=['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.com',
   packages=['foo'],  #same as name
   install_requires=['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.com',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

long_descriptionpypi.org 中用作包的 README 描述。


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

第一步是使用以下方法在 pypi 中声明您的包裹名称和空间:

$ python setup.py register

一旦您的包裹名称被注册,没有人可以声明或使用它。注册成功后,您必须将包裹上传到云端(到云端),

$ python setup.py upload

或者,您也可以使用GPG为您的包裹签名,

$ python setup.py --sign upload

额外奖励 :请在此处查看真实项目中的setup.py示例: torchvision-setup.py

setup.py是 Python 对多平台安装程序和make文件的回答。

如果您熟悉命令行安装,那么make && make install转换为python setup.py build && python setup.py install

有些包是纯 Python,只是字节编译。其他可能包含本机代码,这将需要本机编译器(如gcccl )和 Python 接口模块(如swigpyrex )。