什么是setup.py,如何配置或使用它?


当前回答

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

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

有些包是纯Python的,并且只进行字节编译。其他可能包含本机代码,这将需要本机编译器(如gcc或cl)和Python接口模块(如swig或pyrex)。

其他回答

当您下载带有setup.py的软件包时,请打开终端(Mac、Linux)或命令提示符(Windows)。使用cd并帮助您使用Tab按钮,将路径设置为您下载文件的文件夹和setup.py所在的文件夹:

iMac:~ user $ cd path/pakagefolderwithsetupfile/

按回车键,您将看到如下内容:

iMac:pakagefolderwithsetupfile user$

然后在python setup.py安装之后键入:

iMac:pakagefolderwithsetupfile user$ python setup.py install

按enter键。完成!

setup.py可以在两种情况下使用,首先,您需要安装Python包。其次,您希望创建自己的Python包。通常,标准Python包有几个重要的文件,如setup.py、setup.cfg和Manifest.in。当您创建Python包时,这三个文件将确定(PKG-INFO中egg-INFO文件夹下的内容)名称、版本、描述、其他所需安装(通常在.txt文件中)和其他一些参数。setup.py在创建包时读取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

要安装已下载的Python包,请提取存档并在其中运行setup.py脚本:

python setup.py install

对我来说,这总是感觉很奇怪。像Ruby和Nodejs中那样,在下载时指向包管理器会更自然,例如geminstallrails-4.1.1.gem

包管理器也更舒适,因为它既熟悉又可靠。另一方面,每个setup.py都很新颖,因为它是特定于包的。它要求人们相信惯例“我相信这个setup.py使用的命令与我过去使用过的其他命令相同”。这对精神意志力是一种令人遗憾的负担。

我并不是说setup.py工作流不如包管理器安全(我理解Pip只是在里面运行setup.py),但我肯定觉得这是一个令人震惊的问题。所有命令都指向同一个包管理器应用程序,这是一种和谐。你甚至可能会喜欢它。

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

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

有些包是纯Python的,并且只进行字节编译。其他可能包含本机代码,这将需要本机编译器(如gcc或cl)和Python接口模块(如swig或pyrex)。

setup.py与其他任何文件一样是一个Python文件。它可以使用任何名称,但按照惯例,它被命名为setup.py,因此每个脚本都没有不同的过程。

最常见的setup.py用于安装Python模块,但用于服务器其他目的:

模块:

也许这是setup.py在模块中最著名的用法。尽管可以使用pip安装它们,但旧的Python版本在默认情况下不包含pip,它们需要单独安装。

如果您想安装模块,但不想安装pip,那么几乎唯一的选择就是从setup.py文件安装模块。这可以通过python setup.py安装实现。这将把Python模块安装到根字典中(没有pip、easy_install等)。

当pip失败时,通常使用此方法。例如,如果所需包的正确Python版本无法通过pip获得,可能是因为它不再被维护,那么下载源代码并运行Python setup.py安装将执行相同的操作,除非需要编译二进制文件(但将忽略Python版本-除非返回错误)。

setup.py的另一个用途是从源代码安装软件包。如果模块仍在开发中,车轮文件将不可用,唯一的安装方法是直接从源代码安装。

构建Python扩展:

构建模块后,可以使用distutils设置脚本将其转换为可供分发的模块。一旦构建完成,就可以使用上面的命令安装它们。

安装脚本很容易构建,一旦正确配置了文件,就可以通过运行pythonsetup.pybuild来编译(请参阅所有命令的链接)。

为了便于使用和惯例,它再次命名为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包/脚本。

它采用该名称,因此在构建或安装时始终可以使用相同的命令。