首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是setup.py?

什么是setup.py?
EN

Stack Overflow用户
提问于 2009-09-24 14:16:53
回答 10查看 866.8K关注 0票数 1.3K

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

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-09-24 14:19:35

setup.py是一个python文件,它的出现表明您将要安装的模块/包很可能已经随Distutils一起打包和分发了,Distutils是分发Python模块的标准。

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

代码语言:javascript
复制
$ pip install . 

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

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

票数 974
EN

Stack Overflow用户

发布于 2016-10-02 06:04:49

在您的机器上安装python包foo (也可以在virtualenv中)会有所帮助,这样您就可以从其他项目和IPython提示符导入包foo

它所做的工作类似于pip__easy_install ,,

使用 setup.py

让我们从一些定义开始:

Package -包含__init__.py文件的文件夹/目录。

模块-具有.py扩展名的有效python文件。

发行版--一个包与其他包和模块的关系。

假设您想要安装一个名为foo的包。那你就做吧

代码语言:javascript
复制
$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

相反,如果您不想实际安装它,但仍然想使用它。那就这么做,

代码语言:javascript
复制
$ python setup.py develop  

此命令将在site-package中创建指向源目录的符号链接,而不是复制内容。正因为如此,它是相当快的(特别是对于大的包)。

创建 setup.py

如果您的包树如下所示,

代码语言:javascript
复制
foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

然后,在setup.py脚本中执行以下操作,以便可以将其安装在某些计算机上:

代码语言:javascript
复制
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=['wheel', 'bar', 'greek'], #external packages as dependencies
)

相反,如果您的包树更复杂,如下所示:

代码语言:javascript
复制
foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

然后,在这种情况下,您的setup.py将如下所示:

代码语言:javascript
复制
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=['wheel', 'bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

在(**setup.py**)中添加更多东西,让它看起来更像样:

代码语言:javascript
复制
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=['wheel', 'bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

long_descriptionpypi.org中用作包的自述文件描述。

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

在这一点上有两个选择。

  • 在temporary test.pypi.org服务器上发布,以使自己熟悉该过程,然后将其发布在永久pypi.org服务器上,以便公众可以直接在 permanent pypi.org服务器上使用您的pypi.org,前提是您已经熟悉该过程并拥有您的用户凭据(例如用户名、密码、包名)

一旦您的包名称在pypi.org中注册,任何人都不能声明或使用它。用于(将您的包上传到PyPi)的Python packaging suggests the package。因此,

(1)第一步是使用以下命令在本地构建发行版:

代码语言:javascript
复制
# prereq: wheel (pip install wheel)  
$ python setup.py sdist bdist_wheel   

(2)然后使用twine上传到test.pypi.org或pypi.org:

代码语言:javascript
复制
$ twine upload --repository testpypi dist/*  
username: ***  
password: ***  

程序包需要几分钟才能显示在test.pypi.org上。一旦你对它感到满意,你就可以简单地将你的包上传到pypi.org的real & permanent索引:

代码语言:javascript
复制
$ twine upload dist/*  

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

代码语言:javascript
复制
$ twine upload dist/* --sign 

奖励阅读

在这里查看来自真实项目的示例setup.py

票数 667
EN

Stack Overflow用户

发布于 2009-09-24 15:29:09

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

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

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

票数 120
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1471994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档