什么是setup.py,如何配置或使用它?
当前回答
setup.py是一个python文件,它的存在表明您要安装的模块/包可能已经用Distutils打包和分发,Distutils是分发python模块的标准。
这允许您轻松安装Python包。通常,写下以下内容就足够了:
$ pip install .
pip将使用setup.py安装模块。避免直接调用setup.py。
https://docs.python.org/3/installing/index.html#installing-索引
其他回答
setup.py可以在两种情况下使用,首先,您需要安装Python包。其次,您希望创建自己的Python包。通常,标准Python包有几个重要的文件,如setup.py、setup.cfg和Manifest.in。当您创建Python包时,这三个文件将确定(PKG-INFO中egg-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
为了简单起见,当您调用安装函数时,setup.py会以“__main__”的形式运行,其他答案也会提到。在setup.py中,您应该放置安装软件包所需的一切。
常用setup.py函数
以下两个部分讨论了许多setup.py模块具有的两个功能。
设置工具。设置
此函数允许您指定项目属性,如项目名称、版本。。。。最重要的是,该功能允许您安装其他功能(如果它们打包正确)。有关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命令安装依赖项,以使正在安装的系统处于适合您的包的正确状态。为了避免这种情况,这些功能会变得混乱,并且在操作系统甚至发行版之间经常会有所不同。
要安装已下载的Python包,请提取存档并在其中运行setup.py脚本:
python setup.py install
对我来说,这总是感觉很奇怪。像Ruby和Nodejs中那样,在下载时指向包管理器会更自然,例如geminstallrails-4.1.1.gem
包管理器也更舒适,因为它既熟悉又可靠。另一方面,每个setup.py都很新颖,因为它是特定于包的。它要求人们相信惯例“我相信这个setup.py使用的命令与我过去使用过的其他命令相同”。这对精神意志力是一种令人遗憾的负担。
我并不是说setup.py工作流不如包管理器安全(我理解Pip只是在里面运行setup.py),但我肯定觉得这是一个令人震惊的问题。所有命令都指向同一个包管理器应用程序,这是一种和谐。你甚至可能会喜欢它。
setup.py是Python对多平台安装程序和make文件的回答。
如果您熟悉命令行安装,那么make&&makeinstall将转换为python setup.py build&&python setup.py install。
有些包是纯Python的,并且只进行字节编译。其他可能包含本机代码,这将需要本机编译器(如gcc或cl)和Python接口模块(如swig或pyrex)。
若您下载的包在根文件夹中有“setup.py”,您可以通过运行
python setup.py install
如果您正在开发一个项目,并且想知道该文件对什么有用,请查看Python文档中有关编写安装脚本的内容
推荐文章
- Numpy Max vs amax vs maximum
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 每n行有熊猫
- 实例属性attribute_name定义在__init__之外
- 如何获取在Python中捕获的异常的名称?
- 第一次出现的值大于现有值的Numpy
- 如何从Python函数中返回两个值?
- 前一个月的Python日期
- Python中方括号括起来的列表和圆括号括起来的列表有什么区别?
- Python日志记录不输出任何东西
- 每n秒运行特定代码
- SQLAlchemy是否有与Django的get_or_create等价的函数?
- 如何将python datetime转换为字符串,具有可读格式的日期?
- 美丽的汤和提取div及其内容的ID
- 在Python中重置生成器对象