什么是setup.py?什么是setup.py?(What is setup.py?)

2019-06-17 10:23发布

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

Answer 1:

setup.py是Python文件,它通常会告诉你该模块/包你将要安装已包装和Distutils的,这是分配的Python模块标准分配。

这使您可以轻松地安装Python包。 通常它是足够写:

$ python setup.py install

并且该模块将自行安装。

https://docs.python.org/3/installing/index.html#installing-index



Answer 2:

它可以帮助安装Python包foo你的机器上(也可以在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  

此命令将创建符号链接到站点包,而不是复制的东西中的源目录。 正因为如此,它是相当快(特别是大包)。


创建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作为你的包的README描述。


最后,您现在就可以上传你的包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



Answer 3:

setup.py是Python的答案,一个多平台的安装和make文件。

如果你熟悉命令行安装,那么make && make install转化为python setup.py build && python setup.py install

有些软件包是纯Python,并只能按字节编译。 其他人可能包含本机代码,这将需要一个本地编译器(如gcccl )和一个Python接口模块(如swigpyrex )。



Answer 4:

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

python setup.py install

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



Answer 5:

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

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

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



Answer 6:

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


Answer 7:

当你下载一个包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 。 完成!



Answer 8:

要安装已下载的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和不和谐。 有一个和谐的命令都被以相同的包管理器应用程序。 你甚至可能会增长喜欢它。



Answer 9:

setup.py是像任何其他Python文件。 它可以采取任何名称,除了按照惯例它被命名为setup.py所以不存在对每个脚本不同的过程。

最常见的setup.py是用来安装一个Python模块,但服务器的其他用途:

模块:

也许这是最有名的使用setup.py是模块。 虽然他们可以使用安装pip ,老Python版本不包括pip默认情况下,他们需要单独安装。

如果你想安装的模块,但不希望安装pip ,只是唯一的选择是安装在模块setup.py文件。 这可以通过以下方式实现python setup.py install 。 这将安装Python模块到根辞典(无pipeasy_install ECT)。

这种方法通常用在pip会失败。 例如,如果所需的包的正确的Python版本是无法通过使用pip也许是因为它不再保持,下载源和运行python setup.py install需要将执行同样的事情,除了在编译的二进制文件的情况下, (但会忽略Python版本-unless返回一个错误)。

的另一种用途setup.py是从源代码安装程序包。 如果模块仍处于开发阶段的车轮文件将不可用,安装唯一的办法就是直接从源代码安装。

建筑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_Freeze:

需要安装脚本的另一个模块是cx_Freeze 。 这Python脚本转换为可执行文件。 这让许多命令,比如描述,名称,图标包包括,排除ECT,一旦运行将产生一个分布式应用程序。 从一个示例文档 :

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包/脚本以某种方式。

它需要这么建筑或安装时相同的命令总是可以使用的名称。



Answer 10:

为简单起见,setup.py运行为"__main__"当你调用安装功能提到的其他答案。 内部setup.py,你应该把安装软件包所需的一切。

常见setup.py功能

以下两节讨论两件事情很多setup.py模块有。

setuptools.setup

此功能允许您指定项目的属性 ,如项目名称,版本....最重要的是,这个功能可以让你如果他们妥善包装,安装等功能。 请参阅此网页为setuptools.setup的例子

setuptools.setup的这些属性使安装这些类型的包:

  • 被导入到你的项目,并列举在包的PyPI使用setuptools.findpackages :

    包= find_packages(排除= [ “文档”, “测试”, “的.gitignore”, “README.rst”, “DESCRIPTION.rst”])

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

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

自定义功能

在一个理想的世界, setuptools.setup会处理一切都是为了你。 不幸的是这并非总是如此。 有时你必须做具体的事情,比如与安装依赖子命令,让你在正确的状态,你的包进行安装的系统。 尽量避免这种情况,这些功能会比较混乱,经常与不同的操作系统 ,甚至分布 。



文章来源: What is setup.py?