什么是setup.py?

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

setup.py是一个python文件,它通常告诉你你要安装的模块/软件包已经被打包并且分发了Distutils,这是分发Python模块的标准。

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

 python setup.py install 

该模块将自行安装。

http://docs.python.org/install/index.html

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

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

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

它有助于在你的机器上安装一个python软件包foo (也可以在virtualenv ),这样你就可以从其他项目导入软件包foo ,也可以从Python提示符下导入。

它做类似pipeasy_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结合使用。

http://docs.python.org/distutils/

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理器应用程序的命令都是和谐的。 你甚至可能会喜欢它。