What is setup.py?
有人能解释一下,什么是
这允许您轻松地安装python包。通常情况下,只要写下:
1 | $ python setup.py install |
模块将自行安装。
https://docs.python.org/3/installing/index.html安装索引
它有助于在您的计算机上安装一个python包
它的作用与
使用
让我们从一些定义开始:
包-包含
假设您要安装一个名为
1 2 3 | $ git clone https://github.com/user/foo $ cd foo $ python setup.py install |
相反,如果您不想实际安装它,但仍然想使用它。那就这么做吧,
1 | $ python setup.py develop |
号
此命令将创建指向站点包中源目录的符号链接,而不是复制内容。因此,它的速度相当快(特别是对于大包装)。
创建
如果你的包装树是这样的,
1 2 3 4 5 6 7 8 | foo ├── foo │ ├── data_struct.py │ ├── __init__.py │ └── internals.py ├── README ├── requirements.txt └── setup.py |
然后,在
1 2 3 4 5 6 7 8 9 10 11 | from setuptools import setup setup( name='foo', version='1.0', description='A useful module', author='Man Foo', author_email='[email protected]', packages=['foo'], #same as name install_requires=['bar', 'greek'], #external packages as dependencies ) |
。
相反,如果您的包树比下面的更复杂:
1 2 3 4 5 6 7 8 9 10 11 | foo ├── foo │ ├── data_struct.py │ ├── __init__.py │ └── internals.py ├── README ├── requirements.txt ├── scripts │ ├── cool │ └── skype └── setup.py |
那么,在这种情况下,您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from setuptools import setup setup( name='foo', version='1.0', description='A useful module', author='Man Foo', author_email='[email protected]', packages=['foo'], #same as name install_requires=['bar', 'greek'], #external packages as dependencies scripts=[ 'scripts/cool', 'scripts/skype', ] ) |
。
在(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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='[email protected]', url="http://www.foopackage.com/", packages=['foo'], #same as name install_requires=['bar', 'greek'], #external packages as dependencies scripts=[ 'scripts/cool', 'scripts/skype', ] ) |
。
最后,您现在可以将您的包上传到pypi.org,以便其他人可以使用
第一步是在pypi中声明包名称和空间,方法是:
1 | $ python setup.py register |
一旦注册了您的包名称,就没有人可以声明或使用它。注册成功后,您必须通过
1 | $ python setup.py upload |
。
或者,您也可以通过以下方式与
1 | $ python setup.py --sign upload |
奖金:请看一个真实项目的示例
如果您熟悉命令行安装,那么
有些包是纯python的,只编译了字节。其他可能包含本机代码,需要本机编译器(如
如果下载的包在根文件夹中有"setup.py",则可以通过运行
1 | python setup.py install |
号
如果您正在开发一个项目,并且想知道这个文件对什么有用,那么在编写安装脚本时检查python文档。
许多包结合使用
http://docs.python.org/distutils/
setup.py可以用于两个场景,首先,您要安装一个python包。其次,您要创建自己的python包。通常标准的python包有两个重要的文件,如setup.py、setup.cfg和manifest.in。创建python包时,这三个文件将确定(pkg-info文件夹下的内容)名称、版本、说明、其他所需安装(通常在.txt文件中)和其他几个参数。在创建包时,setup.py读取setup.cfg(可以是tar.gz)。在manifest.in中,您可以定义应该包含在包中的内容。无论如何,你可以用setup.py-like做很多事情
1 2 3 | 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一起使用。寻求帮助
1 | python setup.py --help-commands |
。
要安装已下载的python包,请提取存档并在其中运行setup.py脚本:
1 | python setup.py install |
号
对我来说,这总是觉得很奇怪。在下载时使用包管理器会更自然,就像在Ruby和Nodejs中那样,例如
包管理器也更舒适,因为它熟悉且可靠。另一方面,每个
我并不是说setup.py工作流比包管理器更安全(我知道pip只是在内部运行setup.py),但我肯定觉得这是awkard和jarring。在同一个包管理器应用程序中,命令都是一致的。你甚至可能会喜欢它。
使用
1 | iMac:~ user $ cd path/pakagefolderwithsetupfile/ |
按Enter键,您将看到如下内容:
1 | iMac:pakagefolderwithsetupfile user$ |
。
然后在此之后键入
1 | iMac:pakagefolderwithsetupfile user$ python setup.py install |
。
按
最常见的是
模块:
也许这是
如果您想安装一个模块,但不想安装
这种方法通常在
构建python扩展:
构建模块后,可以使用distutils安装脚本将其转换为准备分发的模块。一旦构建完成,就可以使用上面的命令安装它们。
安装脚本易于构建,一旦文件配置正确,可以通过运行
它又一次被命名为
赛通:
1 2 3 4 5 6 7 | from distutils.core import setup from Cython.Build import cythonize setup( name = 'Hello world app', ext_modules = cythonize("hello.pyx"), ) |
这可以通过
残存冻结:
另一个需要设置脚本的模块是
1 2 3 4 5 6 7 8 9 10 11 12 13 | import sys from cx_Freeze import setup, Executable build_exe_options = {"packages": ["os"],"excludes": ["tkinter"]} base = None if sys.platform =="win32": base ="Win32GUI" setup( name ="guifoo", version ="0.1", description ="My GUI application!", options = {"build_exe": build_exe_options}, executables = [Executable("guifoo.py", base=base)]) |
号
这可以通过
那么什么是
很简单,它是一个在Python环境中构建或配置某些内容的脚本。
当一个包被分发时,它应该只包含一个安装脚本,但是将几个脚本组合成一个安装脚本并不少见。注意,这通常涉及
它使用名称,因此在构建或安装时始终可以使用相同的命令。
为了简单起见,当您调用上述其他答案中提到的安装函数时,setup.py将以
以下两个部分讨论了许多setup.py模块具有的两个功能。
设置工具.设置此函数允许您指定项目属性,如项目名称、版本….最重要的是,这个函数允许您安装其他功能,如果它们被正确打包的话。有关SETUPTOOLS.SETUP的示例,请参阅此网页。SETUPTOOLS.SETUP的这些属性允许安装以下类型的软件包:
使用setuptools.findpackages导入到项目并在pypi中列出的包:
埃多克斯1〔19〕
包不在pypi中,但可以使用依赖项链接从URL下载
埃多克斯1〔20〕
小精灵自定义函数
在一个理想的世界里,