什么是setup.py?
任何人都可以请解释一下,什么是setup.py
以及如何configuration或使用?
setup.py是一个python文件,它通常告诉你你要安装的模块/软件包已经被打包并且分发了Distutils,这是分发Python模块的标准。
这使您可以轻松安装Python包。 通常这足以写出:
python setup.py install
该模块将自行安装。
setup.py
是Python对多平台安装程序和make
文件的回答。
如果您熟悉命令行安装,那么make && make install
转换为python setup.py build && python setup.py install
。
一些软件包是纯Python,只有字节编译。 其他人可能包含本地代码,这将需要本地编译器(如gcc
或cl
)和Python接口模块(如swig
或pyrex
)。
它有助于在你的机器上安装一个python软件包foo
(也可以在virtualenv
),这样你就可以从其他项目导入软件包foo
,也可以从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
这个命令将创build到站点包的源目录的符号链接,而不是复制东西。 正因为如此,速度相当快(特别是对于大型包装)。
创buildsetup.py
如果你有你的包树,
foo ├── foo │ ├── data_struct.py │ ├── __init__.py │ └── internals.py ├── README ├── requirements.txt └── 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_description
中使用long_description作为你的包的README描述。
而且,您可以将您的软件包上传到PyPi.org,以便其他人可以使用pip install yourpackage
软件包来pip install yourpackage
。
第一步是使用以下命令在pypi中声明您的软件包名称和空间:
$ python setup.py register
一旦注册,没有人可以使用您的软件包名称。 之后,您必须将您的软件包上传到云端,
$ python setup.py upload
或者,您也可以通过GPG
签署您的软件包,
$ python setup.py --sign upload
如果您下载了在根文件夹中具有“setup.py”的软件包,则可以通过运行来安装它
python setup.py install
如果您正在开发一个项目,并且想知道这个文件是有用的,请在编写安装脚本时查看Python文档
setup.py
是一个Python脚本,通常附带setup.py
该语言编写的库或程序。 目的是正确安装软件。
许多包使用distutils
框架与setup.py
结合使用。
setup.py可以在两种情况下使用,首先,你想安装一个Python包。 其次,你想创build自己的Python包。 通常标准的Python包有一些重要的文件,如setup.py,setup.cfg和Manifest.in。 在创buildPython包时,这三个文件将决定(在egg-info文件夹下的PKG-INFO中的内容)名称,版本,描述,其他必需的安装(通常在.txt文件中)以及其他一些参数。 setup.cfg在创build包的时候被setup.py读取(可能是tar.gz)。 Manifest.in是您可以定义包装中应包含的内容的地方。 反正你可以使用setup.py来做一堆东西
python setup.py build python setup.py install python setup.py sdist <distname> upload [-r urltorepo] (to upload package to pypi or local repo)
有一堆其他的命令可以用setup.py。 求助
python setup.py --help-commands
当您使用setup.py
下载软件包时,请打开terminal(Mac,Linux)或命令提示符(Windows)。 使用cd
并通过Tabbutton帮助您将path设置到已下载文件的文件夹以及setup.py
所在的位置:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
按回车,你应该看到这样的事情:
iMac:pakagefolderwithsetupfile user$
然后在这个python setup.py install
之后键入:
iMac:pakagefolderwithsetupfile user$ python setup.py install
按enter
。 完成!
要安装你已经下载的Python包,你需要解压档案并在里面运行setup.py脚本:
python setup.py install
对我来说,这一直感到奇怪。 在下载时指定一个包pipe理器是比较自然的,比如在Ruby和Nodejs中可以这样做。 gem install rails-4.1.1.gem
包pipe理员也更舒适,因为它是熟悉和可靠的。 另一方面,每个setup.py
都是新颖的,因为它是特定于包的。 它要求相信约定“我相信这个setup.py和我以前用过的其他命令一样”。 这是一个令人遗憾的精神意志力税。
我并不是说setup.py工作stream比一个软件包pipe理器不太安全(我知道Pip只是运行了setup.py),但是我确实觉得这是一个棘手的问题。 所有对同一个包pipe理器应用程序的命令都是和谐的。 你甚至可能会喜欢它。