任何人都可以请解释,什么是 setup.py 以及它可以如何被配置或使用?

有帮助吗?

解决方案

setup.py是一个python文件,这通常告诉您该模块/包您将要安装已包装和Distutils的,这是用于分发的Python模块的标准分布。结果

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

$ pip install . 

pip将使用setup.py来安装模块。避免直接调用setup.py

https://docs.python.org/3/installing/的index.html#安装指数

其他提示

它有助于安装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,并且仅字节编译。其他人可能包含本机代码,这将需要一个本地编译器(如gcccl)和一个Python接口模块(如swigpyrex)。

如果您下载具有“setup.py”在根文件夹包,则可以通过运行安装它

python setup.py install

如果你正在开发一个项目,但是不知道这是什么文件是,检查 Python文档上有用写入安装脚本

setup.py是一种Python脚本,通常随库或程序,该语言编写的。它的目的就是软件的正确安装。

许多软件包中一起选择使用distutils框架与setup.py

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

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 会为你处理一切。不幸的是情况并非总是如此。有时您必须执行特定的操作,例如使用 子流程 命令,以使您正在安装的系统处于适合您的软件包的正确状态。尽量避免这种情况,这些函数会变得令人困惑,并且通常会有所不同 操作系统 乃至 分配.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top