什么是setup.py,如何配置或使用它?
当前回答
若您下载的包在根文件夹中有“setup.py”,您可以通过运行
python setup.py install
如果您正在开发一个项目,并且想知道该文件对什么有用,请查看Python文档中有关编写安装脚本的内容
其他回答
若您下载的包在根文件夹中有“setup.py”,您可以通过运行
python setup.py install
如果您正在开发一个项目,并且想知道该文件对什么有用,请查看Python文档中有关编写安装脚本的内容
setup.py是一个Python脚本,通常随库或程序一起提供,用该语言编写。其目的是正确安装软件。
许多软件包结合setup.py使用distutils框架。
http://docs.python.org/distutils/
要安装已下载的Python包,请提取存档并在其中运行setup.py脚本:
python setup.py install
对我来说,这总是感觉很奇怪。像Ruby和Nodejs中那样,在下载时指向包管理器会更自然,例如geminstallrails-4.1.1.gem
包管理器也更舒适,因为它既熟悉又可靠。另一方面,每个setup.py都很新颖,因为它是特定于包的。它要求人们相信惯例“我相信这个setup.py使用的命令与我过去使用过的其他命令相同”。这对精神意志力是一种令人遗憾的负担。
我并不是说setup.py工作流不如包管理器安全(我理解Pip只是在里面运行setup.py),但我肯定觉得这是一个令人震惊的问题。所有命令都指向同一个包管理器应用程序,这是一种和谐。你甚至可能会喜欢它。
它有助于在您的机器上安装python包foo(也可以在virtualenv中),以便您可以从其他项目以及[I]python提示中导入包foo。
它完成了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,以便其他人可以使用pipinstallyourpackage安装您的包。
此时有两种选择。
在临时test.pypi.org服务器上发布以使自己熟悉该过程,然后将其发布在永久pypi.org服务器上,供公众使用您的包。如果您已经熟悉该过程并拥有用户凭据(例如用户名、密码、包名),请立即在永久pypi.org服务器上发布
一旦您的包名在pypi.org中注册,就没有人可以声明或使用它。Python打包建议将twin包用于上传目的(将您的包上传到pypi)。因此
第一步是使用以下方法在本地构建分布:#前提条件:轮子(pip安装轮子)$python setup.py sdist bdist_wheel然后使用twine上传到test.pypi.org或pypi.org:$twine上载--存储库testpypi dist/*用户名:***密码:***
该包需要几分钟的时间才能出现在test.pypi.org上。一旦你对它感到满意,你就可以简单地将你的包上传到pypi.org的真实和永久索引中:
$ twine upload dist/*
或者,您也可以通过以下方式使用GPG对包中的文件进行签名:
$ twine upload dist/* --sign
奖金阅读:
在这里查看来自真实项目的示例setup.py:torchvision-setup.pyPEP 517,设置工具为什么缠绕?使用绳线
当您下载带有setup.py的软件包时,请打开终端(Mac、Linux)或命令提示符(Windows)。使用cd并帮助您使用Tab按钮,将路径设置为您下载文件的文件夹和setup.py所在的文件夹:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
按回车键,您将看到如下内容:
iMac:pakagefolderwithsetupfile user$
然后在python setup.py安装之后键入:
iMac:pakagefolderwithsetupfile user$ python setup.py install
按enter键。完成!
推荐文章
- Python glob多个文件类型
- 如何可靠地打开与当前运行脚本在同一目录下的文件
- Python csv字符串到数组
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?
- 在Python生成器上使用“send”函数的目的是什么?
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成
- 提取和保存视频帧
- 使用请求包时出现SSL InsecurePlatform错误