什么是 setup.py?

谁能解释一下, setup.py是什么,如何配置或使用它?

答案

$ pip install .
$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install
$ python setup.py develop
foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── 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
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',
           ]
)
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',
           ]
)
$ python setup.py register
$ python setup.py upload
$ python setup.py --sign upload

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

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

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

python setup.py install

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

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

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

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)
python setup.py --help-commands
iMac:~ user $ cd path/pakagefolderwithsetupfile/
iMac:pakagefolderwithsetupfile user$
iMac:pakagefolderwithsetupfile user$ python setup.py install
python setup.py install
from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)
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)])

为简单"__main__"当您调用安装函数并提到其他答案时,setup.py 将以"__main__"运行。在 setup.py 内部,应该放置安装软件包所需的一切。

常用的 setup.py 功能

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

setuptools.setup

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

使用 setuptools.setup 的这些属性可以安装以下类型的软件包:

自定义功能

在理想的情况下, setuptools.setup将为您处理所有事情。不幸的是,情况并非总是如此。有时,您需要做一些特定的事情,例如使用subprocess命令安装依赖项,以使要安装的系统处于正确的软件包状态。尝试避免这种情况,这些功能会造成混乱,并且在OS甚至发行版之间通常会有所不同。