是什么setup.py?
-
16-09-2019 - |
题
任何人都可以请解释,什么是 setup.py
以及它可以如何被配置或使用?
解决方案
setup.py
是一个python文件,这通常告诉您该模块/包您将要安装已包装和Distutils的,这是用于分发的Python模块的标准分布。结果
这使您可以轻松安装Python包。通常,这足以写:
$ pip install .
pip
将使用setup.py来安装模块。避免直接调用setup.py
。
其他提示
它有助于安装python包 foo
你的机器上(也可以在 virtualenv
),以便可以进口包装 foo
从其他项目,也从[I]蟒蛇的提示。
它不会的类似工作的 pip
, easy_install
等等,
使用 setup.py
让我们开始与一些定义:
包 -一个文件夹/目录,包含 __init__.py
文件。
模块 -一个有效的python文件 .py
扩展。
分布 -怎么一个 包 涉及其他 包裹 和 模块.
让我们说你要安装一揽子命名为 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.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
是用在 pypi.org 作为自述的描述您的包裹。
最后,你现在准备好上传你的包 PyPi.org 以便其他人可以安装使用您的包裹 pip install yourpackage
.
第一步是要求你的包名称和空间在pypi使用:
$ python setup.py register
一旦您的包裹名注册,没有人可以要求或使用它。注册成功后,你要上你的包还有(云),
$ python setup.py upload
或者,你也可以签上你的包 GPG
由,
$ python setup.py --sign upload
奖金:看到一样 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 setup.py install
如果你正在开发一个项目,但是不知道这是什么文件是,检查 Python文档上有用写入安装脚本
setup.py
是一种Python脚本,通常随库或程序,该语言编写的。它的目的就是软件的正确安装。
许多软件包中一起选择使用distutils
框架与setup.py
。
setup.py可以在两种情况下被使用,首先,要安装一个Python包。其次,你要创建自己的Python包。通常标准的Python包有几个像setup.py,setup.cfg和Manifest.in重要文件。当你创建的Python包,这三个文件将确定的名称,版本,描述,其他所需的设备(通常是在.txt文件)和其他一些参数(下鸡蛋信息文件夹PKG-INFO的内容)。 setup.cfg由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
打开你的终端(苹果机和Linux)或命令提示符(Windows)。使用cd
并帮助您使用Tab键将路径设置权,你已经下载的文件,其中有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
对我来说,这一直感到奇怪。这将是更自然的下载点的软件包管理器,正如人们在Ruby和的NodeJS,如做。 gem install rails-4.1.1.gem
一个包管理器更加舒适也一样,因为它是熟悉和可靠。在另一方面,每个setup.py
是新颖的,因为它是具体的包。它要求在公约的信心:“我相信这setup.py需要为别人我在过去已经使用了相同的命令”。这是对精神意志力一个令人遗憾的税。
我不是说了setup.py工作流程比的软件包管理器(我的理解皮普只是运行里面的setup.py)不太安全,但肯定我觉得这是awkard和不和谐。有一个和谐的命令都被以相同的包管理器应用程序。你甚至可能会增长喜欢它。
setup.py
是一个与其他文件一样的 Python 文件。它可以采用任何名称,但按照惯例命名的除外 setup.py
这样每个脚本就没有不同的过程。
最常用 setup.py
用于安装 Python 模块但用于其他目的:
模块:
也许这是最著名的用法 setup.py
是在模块中。虽然它们可以使用安装 pip
, ,旧的Python版本不包括 pip
默认情况下,它们需要单独安装。
如果您想安装模块但不想安装 pip
, ,唯一的选择就是从安装模块 setup.py
文件。这可以通过以下方式实现 python setup.py install
. 。这会将 Python 模块安装到根字典中(无需 pip
, easy_install
等)。
此方法常用于以下情况 pip
将失败。例如,如果无法通过以下方式获得所需包的正确 Python 版本 pip
可能是因为不再维护,下载源码并运行 python setup.py install
会执行相同的操作,除非需要编译二进制文件(但会忽略 Python 版本 - 除非返回错误)。
另一种用途是 setup.py
是从源安装一个包。如果模块仍在开发中,则轮文件将不可用,唯一的安装方法是直接从源安装。
构建 Python 扩展:
构建模块后,可以使用以下命令将其转换为可供分发的模块: distutils 安装脚本. 。构建完成后,可以使用上面的命令安装它们。
安装脚本很容易构建,一旦文件被正确配置并可以通过运行进行编译 python setup.py build
(请参阅所有命令的链接)。
再次被命名为 setup.py
为了便于使用并按照惯例,但可以采用任何名称。
赛通:
另一个著名的用法是 setup.py
文件包含已编译的扩展名。这些需要具有用户定义值的设置脚本。它们允许快速(但一旦编译就依赖于平台)执行。这是一个简单的例子 文档:
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_冻结:
另一个需要安装脚本的模块是 cx_Freeze
. 。这会将 Python 脚本转换为可执行文件。这允许许多命令(例如描述、名称、图标、包)包含、排除等,并且一旦运行将生成可分发的应用程序。一个例子来自 文档:
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
.
那么什么是 setup.py
文件?
很简单,它是一个在 Python 环境中构建或配置某些内容的脚本。
分发时的包应仅包含一个安装脚本,但将多个安装脚本组合在一起并形成一个安装脚本的情况并不罕见。请注意,这通常涉及 distutils
但并非总是如此(正如我在上一个示例中所示)。需要记住的是,它只是以某种方式配置 Python 包/脚本。
它采用名称,因此在构建或安装时始终可以使用相同的命令。
为了简单起见,setup.py 运行为 "__main__"
当你打电话给 安装函数 提到的其他答案。在 setup.py 中,您应该放置安装软件包所需的所有内容。
常用setup.py函数
以下两节讨论许多 setup.py 模块具有的两件事。
安装工具.setup
该功能允许您指定 项目属性 比如项目名称、版本……最重要的是,如果打包正确,此函数允许您安装其他函数。看 这个网页 有关 setuptools.setup 的示例
setuptools.setup 的这些属性允许安装这些类型的包:
导入到您的项目并在中列出的包 皮伊 使用 setuptools.findpackages:
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
包裹不在 皮伊, ,但可以使用以下 URL 从 URL 下载 依赖链接
dependency_links=["http://peak.telecommunity.com/snapshots/",]
自定义功能
在一个理想的世界里, setuptools.setup
会为你处理一切。不幸的是情况并非总是如此。有时您必须执行特定的操作,例如使用 子流程 命令,以使您正在安装的系统处于适合您的软件包的正确状态。尽量避免这种情况,这些函数会变得令人困惑,并且通常会有所不同 操作系统 乃至 分配.