什么是setup.py?

2024-12-23 08:43:00
admin
原创
177
摘要:问题描述:它是什么setup.py以及如何配置或使用它?解决方案 1:setup.py是一个 Python 文件,它的存在表明您将要安装的模块/包很可能已经使用Distutils打包和分发,这是分发 Python 模块的标准。这样你就可以轻松安装 Python 包。通常只需编写:$ pip install ....

问题描述:

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


解决方案 1:

setup.py是一个 Python 文件,它的存在表明您将要安装的模块/包很可能已经使用Distutils打包和分发,这是分发 Python 模块的标准。

这样你就可以轻松安装 Python 包。通常只需编写:

$ pip install . 

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

解决方案 2:

它有助于foo在您的机器上安装一个 python 包(也可以在中virtualenv),以便您可以foo从其他项目以及 [I]Python 提示中导入该包。

它的作用pipeasy_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

此命令将创建指向 site-packages 中源目录的符号链接,而不是复制内容。因此,它非常快(特别是对于大型包)。


创建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.example',
   packages=['foo'],  #same as name
   install_requires=['wheel', '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.example',
   packages=['foo'],  #same as name
   install_requires=['wheel', '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.example',
   url="http://www.foopackage.example/",
   packages=['foo'],  #same as name
   install_requires=['wheel', 'bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

在pypi.orglong_description中用作您的包的 README 描述。


最后,您现在可以将包上传到PyPi.org,以便其他人可以使用来安装您的包pip install yourpackage

此时有两个选择。

  • 在临时的 test.pypi.org服务器上发布,使自己熟悉流程,然后将其发布到永久的 pypi.org服务器上,以供公众使用你的包。

  • 如果您已经熟悉该过程并拥有用户凭据(例如用户名、密码、包名称),则可立即在永久 pypi.org服务器上发布

一旦您的软件包名称在pypi.org中注册,任何人都不能认领或使用它。Python打包建议使用twine软件包进行上传(将您的软件包上传到 PyPi)。因此,

  1. 第一步是使用以下方法在本地构建发行版:

# prereq: wheel (pip install wheel)
$ python setup.py sdist bdist_wheel
  1. 然后使用twine上传到test.pypi.orgpypi.org

$ twine upload --repository testpypi dist/*
username: ***
password: ***

软件包需要几分钟才能出现在 上test.pypi.org。一旦您满意,您就可以将您的软件包上传到pypi.org的真实和永久索引,只需使用以下命令:

$ twine upload dist/*

或者,您也可以使用以下方式对软件包中的文件进行签名GPG

$ twine upload dist/* --sign

附加阅读

  • setup.py在此处查看真实项目的示例:torchvision-setup.py

  • PEP 517,设置工具

  • 为什么要用 twine?使用 twine

解决方案 3:

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

如果您熟悉命令行安装,则make && make install转换为python setup.py build && python setup.py install

有些软件包是纯 Python 的,仅进行字节编译。其他软件包可能包含本机代码,这将需要本机编译器(如gcccl)和 Python 接口模块(如swigpyrex)。

解决方案 4:

如果你下载的软件包在根文件夹中包含“setup.py”,则可以通过运行来安装它

python setup.py install

如果你正在开发一个项目,并且想知道这个文件有什么用,请查看Python 文档中关于编写安装脚本的内容

解决方案 5:

setup.py是一个通常随库或程序一起提供的 Python 脚本,以该语言编写。其目的是正确安装软件。

许多软件包distutils与 结合使用该框架setup.py

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

解决方案 6:

setup.py 可以在两种情况下使用,首先,你想要安装一个 Python 包。其次,你想要创建自己的 Python 包。通常标准的 Python 包有几个重要的文件,如 setup.py、setup.cfg 和 Manifest.in。当你创建 Python 包时,这三个文件将决定(egg-info 文件夹下 PKG-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

解决方案 7:

setup.py是与其他文件一样的 Python 文件。它可以采用任何名称,但按照惯例,它的名称setup.py应确保每个脚本的程序不会有所不同。

最常setup.py用于安装 Python 模块,但服务器还有其他用途:

模块:

这也许是模块中最著名的用法setup.py。虽然可以使用来安装它们pip,但旧版 Python 默认不包含pip它们,需要单独安装。

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

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

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

构建 Python 扩展:

模块构建完成后,可以使用distutils 安装脚本将其转换为可供分发的模块。构建完成后,可以使用上述命令进行安装。

安装脚本很容易构建,一旦文件被正确配置,就可以通过运行进行编译python setup.py build(查看所有命令的链接)。

再次强调,它的命名是setup.py为了易于使用和遵循惯例,但可以采用任何名称。

Cython:

文件的另一个著名用途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_冻结:

另一个需要安装脚本的模块是。它将 Python 脚本转换为可执行文件。这允许许多命令,例如描述、名称、图标、要包含的包、排除的包等,并且一旦运行就会生成可分发的应用程序。文档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

那么什么是setup.py文件?

很简单,它是一个在 Python 环境中构建或配置某些内容的脚本。

一个包在分发时应该只包含一个安装脚本,但将多个安装脚本组合成一个安装脚本的情况并不罕见。请注意,这通常涉及distutils但并非总是如此(正如我在上一个示例中所展示的那样)。要记住的是,它只是以某种方式配置 Python 包/脚本。

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

解决方案 8:

当您下载软件包时,请setup.py打开终端 (Mac、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。完成!

解决方案 9:

简单来说,setup.py 的运行方式与"__main__"调用其他答案中提到的安装函数的方式相同。在 setup.py 中,您应该放入安装包所需的所有内容。

常见的setup.py函数

以下两节讨论了许多 setup.py 模块所具有的两件事。

设置工具.setup

此函数允许您指定项目属性,如项目名称、版本……最重要的是,如果其他函数已正确打包,则此函数允许您安装它们。请参阅此网页以获取 setuptools.setup 的示例。setuptools.setup

的这些属性允许安装以下类型的包:

  • 使用setuptools.findpackages导入到你的项目并在PyPI中列出的包:

packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])

  • 不在PyPI中的软件包,但可以使用dependency_links从 URL 下载

dependency_links=["http://peak.telecommunity.com/snapshots/",]

自定义函数

在理想情况下,setuptools.setup它会为您处理所有事情。不幸的是,情况并非总是如此。有时您必须执行特定操作,例如使用subprocess命令安装依赖项,以使您正在安装的系统处于适合您的软件包的状态。尽量避免这种情况,这些功能会令人困惑,并且通常在操作系统甚至发行版之间有所不同。

解决方案 10:

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

python setup.py install

对我来说,这总是感觉很奇怪。更自然的做法是让包管理器指向下载,就像在 Ruby 和 Nodejs 中所做的那样。gem install rails-4.1.1.gem

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

我并不是说 setup.py 工作流程不如包管理器安全(我知道 Pip 只是在里面运行 setup.py),但我确实觉得它很尴尬和不协调。所有命令都放在同一个包管理器应用程序中,这很和谐。你甚至可能会喜欢它。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用