任何人都可以解释一下,什么是 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 .
foo
virtualenv
It does the similar job of pip, easy_install etc.,
Using setup.py
让我们从一些定义开始:
包 - 包含 __init__.py 文件的文件夹/目录 .模块 - 具有 .py 扩展名的有效python文件 .分发 - 一个包与其他包和模块的关系 .
__init__.py
.py
假设您要安装名为 foo 的包 . 那你呢,
$ git clone https://github.com/user/foo $ cd foo $ python setup.py install
相反,如果您不想实际安装它但仍想使用它 . 然后做,
$ python setup.py develop
此命令将为site-packages中的源目录创建符号链接,而不是复制内容 . 因此,它非常快(特别是对于大型包装) .
Creating 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', ] )
Add more stuff to (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 在pypi.org中用作包的README描述 .
long_description
最后,您现在已准备好将包上传到PyPi.org,以便其他人可以使用 pip install yourpackage 安装您的包 .
pip install yourpackage
第一步是使用以下方法在pypi中声明您的包裹名称和空间:
$ python setup.py register
一旦您的包名被注册,没有人可以声明或使用它 . 注册成功后,您必须将您的包上传到 Cloud 端(到 Cloud 端),
$ python setup.py upload
或者,您也可以使用 GPG 来签署您的包裹,
GPG
$ python setup.py --sign upload
Bonus :从这里的实际项目中查看示例 setup.py :torchvision-setup.py
setup.py 是Python对多平台安装程序和 make 文件的回答 .
make
如果您熟悉命令行安装,则 make && make install 将转换为 python setup.py build && python setup.py install .
make && make install
python setup.py build && python setup.py install
有些包是纯Python,只是字节编译 . 其他可能包含本机代码,这将需要本机编译器(如 gcc 或 cl )和Python接口模块(如 swig 或 pyrex ) .
gcc
cl
swig
pyrex
如果您下载了根文件夹中包含“setup.py”的软件包,则可以通过运行来安装它
python setup.py install
如果您正在开发项目并想知道此文件的用途,请检查Python documentation on writing the Setup Script
setup.py 是一个Python脚本,通常随用该语言编写的库或程序一起提供 . 它的目的是正确安装软件 .
许多软件包使用 distutils 框架与 setup.py 结合使用 .
distutils
http://docs.python.org/distutils/
setup.py可以在两种情况下使用,首先,您要安装Python包 . 其次,您要创建自己的Python包 . 通常标准的Python包有几个重要的文件,如setup.py,setup.cfg和Manifest.in . 在创建Python包时,这三个文件将确定(egg-info文件夹下的PKG-INFO中的内容)名称,版本,描述,其他所需安装(通常在.txt文件中)和其他一些参数 . 在创建包时,setup.cf读取setup.cfg(可能是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 的软件包时,请打开终端(Mac,Linux)或命令提示符(Windows) . 使用 cd 并帮助您使用Tab按钮将路径设置为您已下载文件的文件夹以及 setup.py 所在的文件夹:
cd
iMac:~ user $ cd path/pakagefolderwithsetupfile/
按回车键,您应该看到如下内容:
iMac:pakagefolderwithsetupfile user$
然后在 python setup.py install 之后输入:
iMac:pakagefolderwithsetupfile user$ python setup.py install
按 enter . 完成!
enter
要安装已下载的Python包,请解压缩存档并运行setup.py脚本:
对我来说,这总是让人感到奇怪 . 将包管理器指向下载是更自然的,就像在Ruby和Nodejs中那样,例如 . gem install rails-4.1.1.gem
gem install rails-4.1.1.gem
包管理器也更舒适,因为它熟悉且可靠 . 另一方面,每个 setup.py 都是新颖的,因为它对精神意志力征税是令人遗憾的 .
我不是说setup.py工作流程不如包管理器安全(我理解Pip只运行setup.py),但我觉得它很尴尬和不和谐 . 有个和谐到命令所有属于同一个包管理器应用程序 . 你甚至可能会喜欢它 .
setup.py 是一个Python文件,与其他任何文件一样 . 它可以采用任何名称,除非按惯例,它名为 setup.py ,因此每个脚本没有不同的过程 .
最常见的 setup.py 用于安装Python模块,但服务器用于其他目的:
Modules:
也许这是 setup.py 最着名的用法是在模块中 . 尽管可以使用 pip 安装它们,但旧的Python版本默认情况下不包含 pip ,它们需要单独安装 .
pip
如果你想安装一个模块但又不想安装 pip ,那么唯一的选择就是从 setup.py 文件安装模块 . 这可以通过 python setup.py install 来实现 . 这会将Python模块安装到根字典(没有 pip , easy_install 等) .
easy_install
当 pip 失败时,通常会使用此方法 . 例如,如果通过 pip 无法获得所需包的正确Python版本,可能因为它不再被维护,则下载源并运行 python setup.py install 会执行相同的操作,除非需要编译二进制文件,(但是忽略Python版本 - 不返回错误) .
setup.py 的另一个用途是从源代码安装包 . 如果模块仍在开发中,则轮盘文件将不可用,唯一的安装方法是直接从源安装 .
Building Python extensions:
构建模块后,可以使用distutils setup script将其转换为模块,以便进行分发 . 构建完成后,可以使用上面的命令进行安装 .
设置脚本很容易构建,一旦文件已正确配置,可以通过运行 python setup.py build 进行编译(参见所有命令的链接) .
python setup.py build
它再一次被命名为 setup.py ,以便于使用和按照惯例,但可以取任何名称 .
Cython:
setup.py 文件的另一个着名用法包括编译扩展 . 这些需要具有用户定义值的设置脚本 . 它们允许快速(但一旦编译是依赖于平台的)执行 . 以下是documentation的一个简单示例:
from distutils.core import setup from Cython.Build import cythonize setup( name = 'Hello world app', ext_modules = cythonize("hello.pyx"), )
这可以通过 python setup.py build 编译
Cx_Freeze:
另一个需要安装脚本的模块是 cx_Freeze . 这会将Python脚本转换为可执行文件 . 这允许包括描述,名称,图标,包等许多命令,排除ect,一旦运行将产生可分发的应用程序 . documentation的一个例子:
cx_Freeze
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 build 编译 .
So what is a setup.py file?
很简单,它是一个在Python环境中构建或配置某些东西的脚本 .
分发时的程序包应该只包含一个安装脚本,但将多个程序组合在一起构成一个安装脚本并不罕见 . 请注意,这通常涉及 distutils 但并不总是(正如我在上一个例子中所示) . 要记住它只是以某种方式配置Python包/脚本 .
它采用名称,因此在构建或安装时始终可以使用相同的命令 .
为简单起见,当您调用install functions提到的其他答案时,setup.py将作为 "__main__" 运行 . 在setup.py中,您应该放置安装包所需的一切 .
"__main__"
以下两节讨论了许多setup.py模块的两个问题 .
此功能允许您指定project attributes,如项目名称,版本....最重要的是,此功能允许您安装其他功能,如果它们打包正确 . 有关setuptools.setup的示例,请参阅this webpage
setuptools.setup的这些属性允许安装这些类型的包:
packages = find_packages(exclude = [“docs”,“tests”,“ . gitignore”,“README.rst”,“DESCRIPTION.rst”])
dependency_links = [“http://peak.telecommunity.com/snapshots/”,]
在一个理想的世界里, setuptools.setup 会为你处理一切 . 不幸的是,并非总是如此 . 有时您必须执行特定的操作,例如使用subprocess命令安装依赖项,以使您正在安装的系统处于正确的包状态 . 尽量避免这种情况,这些功能会让人感到困惑,并且在OS甚至distribution之间通常会有所不同 .
setuptools.setup
10 回答
setup.py
是一个python文件,它通常告诉您要安装的模块/包已经与Distutils一起打包和分发,这是分发Python模块的标准 .这使您可以轻松安装Python包 . 通常它写得足够:
并且模块将自行安装 .
https://docs.python.org/3/installing/index.html#installing-index
它有助于在您的机器上安装python包
foo
(也可以在virtualenv
中),这样您就可以从其他项目以及[I] Python提示中导入包foo
.It does the similar job of pip, easy_install etc.,
Using setup.py
让我们从一些定义开始:
包 - 包含
__init__.py
文件的文件夹/目录 .模块 - 具有
.py
扩展名的有效python文件 .分发 - 一个包与其他包和模块的关系 .
假设您要安装名为
foo
的包 . 那你呢,相反,如果您不想实际安装它但仍想使用它 . 然后做,
此命令将为site-packages中的源目录创建符号链接,而不是复制内容 . 因此,它非常快(特别是对于大型包装) .
Creating setup.py
如果你有你的包树,
然后,在 setup.py 脚本中执行以下操作,以便可以在某台计算机上安装它:
相反,如果您的包树更复杂,如下所示:
那么,在这种情况下你的 setup.py 就像:
Add more stuff to (setup.py) 并使其体面:
long_description
在pypi.org中用作包的README描述 .最后,您现在已准备好将包上传到PyPi.org,以便其他人可以使用
pip install yourpackage
安装您的包 .第一步是使用以下方法在pypi中声明您的包裹名称和空间:
一旦您的包名被注册,没有人可以声明或使用它 . 注册成功后,您必须将您的包上传到 Cloud 端(到 Cloud 端),
或者,您也可以使用
GPG
来签署您的包裹,Bonus :从这里的实际项目中查看示例 setup.py :torchvision-setup.py
setup.py
是Python对多平台安装程序和make
文件的回答 .如果您熟悉命令行安装,则
make && make install
将转换为python setup.py build && python setup.py install
.有些包是纯Python,只是字节编译 . 其他可能包含本机代码,这将需要本机编译器(如
gcc
或cl
)和Python接口模块(如swig
或pyrex
) .如果您下载了根文件夹中包含“setup.py”的软件包,则可以通过运行来安装它
如果您正在开发项目并想知道此文件的用途,请检查Python documentation on writing the Setup Script
setup.py
是一个Python脚本,通常随用该语言编写的库或程序一起提供 . 它的目的是正确安装软件 .许多软件包使用
distutils
框架与setup.py
结合使用 .http://docs.python.org/distutils/
setup.py可以在两种情况下使用,首先,您要安装Python包 . 其次,您要创建自己的Python包 . 通常标准的Python包有几个重要的文件,如setup.py,setup.cfg和Manifest.in . 在创建Python包时,这三个文件将确定(egg-info文件夹下的PKG-INFO中的内容)名称,版本,描述,其他所需安装(通常在.txt文件中)和其他一些参数 . 在创建包时,setup.cf读取setup.cfg(可能是tar.gz) . Manifest.in是您可以定义包中应包含的内容的地方 . 无论如何,你可以使用setup.py之类的东西
还有许多其他命令可以与setup.py一起使用 . 求助
下载包含
setup.py
的软件包时,请打开终端(Mac,Linux)或命令提示符(Windows) . 使用cd
并帮助您使用Tab按钮将路径设置为您已下载文件的文件夹以及setup.py
所在的文件夹:按回车键,您应该看到如下内容:
然后在
python setup.py install
之后输入:按
enter
. 完成!要安装已下载的Python包,请解压缩存档并运行setup.py脚本:
对我来说,这总是让人感到奇怪 . 将包管理器指向下载是更自然的,就像在Ruby和Nodejs中那样,例如 .
gem install rails-4.1.1.gem
包管理器也更舒适,因为它熟悉且可靠 . 另一方面,每个
setup.py
都是新颖的,因为它对精神意志力征税是令人遗憾的 .我不是说setup.py工作流程不如包管理器安全(我理解Pip只运行setup.py),但我觉得它很尴尬和不和谐 . 有个和谐到命令所有属于同一个包管理器应用程序 . 你甚至可能会喜欢它 .
setup.py
是一个Python文件,与其他任何文件一样 . 它可以采用任何名称,除非按惯例,它名为setup.py
,因此每个脚本没有不同的过程 .最常见的
setup.py
用于安装Python模块,但服务器用于其他目的:Modules:
也许这是
setup.py
最着名的用法是在模块中 . 尽管可以使用pip
安装它们,但旧的Python版本默认情况下不包含pip
,它们需要单独安装 .如果你想安装一个模块但又不想安装
pip
,那么唯一的选择就是从setup.py
文件安装模块 . 这可以通过python setup.py install
来实现 . 这会将Python模块安装到根字典(没有pip
,easy_install
等) .当
pip
失败时,通常会使用此方法 . 例如,如果通过pip
无法获得所需包的正确Python版本,可能因为它不再被维护,则下载源并运行python setup.py install
会执行相同的操作,除非需要编译二进制文件,(但是忽略Python版本 - 不返回错误) .setup.py
的另一个用途是从源代码安装包 . 如果模块仍在开发中,则轮盘文件将不可用,唯一的安装方法是直接从源安装 .Building Python extensions:
构建模块后,可以使用distutils setup script将其转换为模块,以便进行分发 . 构建完成后,可以使用上面的命令进行安装 .
设置脚本很容易构建,一旦文件已正确配置,可以通过运行
python setup.py build
进行编译(参见所有命令的链接) .它再一次被命名为
setup.py
,以便于使用和按照惯例,但可以取任何名称 .Cython:
setup.py
文件的另一个着名用法包括编译扩展 . 这些需要具有用户定义值的设置脚本 . 它们允许快速(但一旦编译是依赖于平台的)执行 . 以下是documentation的一个简单示例:这可以通过
python setup.py build
编译Cx_Freeze:
另一个需要安装脚本的模块是
cx_Freeze
. 这会将Python脚本转换为可执行文件 . 这允许包括描述,名称,图标,包等许多命令,排除ect,一旦运行将产生可分发的应用程序 . documentation的一个例子:这可以通过
python setup.py build
编译 .So what is a setup.py file?
很简单,它是一个在Python环境中构建或配置某些东西的脚本 .
分发时的程序包应该只包含一个安装脚本,但将多个程序组合在一起构成一个安装脚本并不罕见 . 请注意,这通常涉及
distutils
但并不总是(正如我在上一个例子中所示) . 要记住它只是以某种方式配置Python包/脚本 .它采用名称,因此在构建或安装时始终可以使用相同的命令 .
为简单起见,当您调用install functions提到的其他答案时,setup.py将作为
"__main__"
运行 . 在setup.py中,您应该放置安装包所需的一切 .常见的setup.py函数
以下两节讨论了许多setup.py模块的两个问题 .
setuptools.setup
此功能允许您指定project attributes,如项目名称,版本....最重要的是,此功能允许您安装其他功能,如果它们打包正确 . 有关setuptools.setup的示例,请参阅this webpage
setuptools.setup的这些属性允许安装这些类型的包:
packages = find_packages(exclude = [“docs”,“tests”,“ . gitignore”,“README.rst”,“DESCRIPTION.rst”])
dependency_links = [“http://peak.telecommunity.com/snapshots/”,]
自定义功能
在一个理想的世界里,
setuptools.setup
会为你处理一切 . 不幸的是,并非总是如此 . 有时您必须执行特定的操作,例如使用subprocess命令安装依赖项,以使您正在安装的系统处于正确的包状态 . 尽量避免这种情况,这些功能会让人感到困惑,并且在OS甚至distribution之间通常会有所不同 .