热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PythonSetuptools的setup.py

Python的setup.py背景pip是最主流的包管理方案,使用pipinstallxxxpip无法正常下载Python模块,或者需要在离线环境
Python 的 setup.py

背景

pip 是最主流的包管理方案,使用

pip install xxx

pip 无法正常下载Python模块,或者需要在离线环境及无网络环境安装Python包的时候,可以采用安装 .whl文件或者setup.py文件的方式。

一般的可以在下面的这个网站找到: https://pypi.org/

下载对应的包的whl文件,然后执行

pip install XXX.whl

在安装普通的python包时,利用pip工具相当简单。采用setup.py去构建环境,将自己写的模块以及相应的依赖库一起打包,用setup去完成这个任务。 所以很多github代码都提供setup.py方便我们一键安装

如果您下载的软件包在根文件夹中具有“ setup.py”,则可以通过运行以下命令进行安装:

python setup.py install

如果你想安装一个模块但又不想安装pip,那么唯一的选择就是从setup.py文件安装模块。这可以通过python setup.py install。

什么是setup.py、setuptools

官网:Building and Distributing Packages with Setuptools
参考URL: https://setuptools.pypa.io/en/latest/setuptools.html

setup.py是一个 python 文件,它的存在表明您要安装的模块/包可能已经用 Setuptools 打包和分发,这是分发 Python 模块的标准。 它的目的是正确安装软件。

setuptools是python自带的用来构建包的工具,构建出来的wheel(.whl)可供其他人pip install和import。

总之,setuptools就是比distutils好用的多,基本满足大型项目的安装和发布!

一个最基本的”setup.py”文件如下:

#coding:utf8
from setuptools import setup
setup(name='MyApp', # 项目名version='1.0', # 版本号packages=['myapp'] # 包括在安装包内的Python包
)

什么是setuptools

setuptools官方文档:https://setuptools.readthedocs.io

distutils 是标准库中负责建立 Python 第三方库的安装器,使用它能够进行 Python 模块的安装和发布。

setuptools 是 distutils 增强版,不包括在标准库中。其扩展了很多功能,能够帮助开发者更好的创建和分发 Python 包。大部分 Python 用户都会使用更先进的 setuptools 模块。

Setuptools 提供一流的setup.py文件支持作为配置机制。setup.py 调用了 setuptools 包中的setup方法。

然而,重要的是要记住,强烈建议不要将此文件作为脚本(例如)运行,并且大多数命令行界面已经(或将要)弃用 (例如,…)。python setup.py sdistpython setup.py installpython setup.py bdist_wininst

** 我们还建议用户通过pyproject.tomlsetup.cfg以更具声明性的方式公开尽可能多的配置,并仅使用动态部分保持最小化(如果适用,甚至完全省略)**。setup.py有关更多背景信息,请参阅为什么不应该直接调用 setup.py 。

setup.py命令

查看所有支持的命令:

python setup.py --help-commands

构建安装时所需的所有内容:

python setup.py build

安装包到系统环境中。该命令会将当前项目安装到当前Python环境的”site-packages”目录下,这样其他项目就可以像导入标准库一样导入该项目的代码了。

python setup.py install

以开发方式安装包:
如果项目在开发过程中会频繁变更,每次安装还需要先将原来的版本卸掉,会很麻烦。使用”develop”开发方式安装的话,项目代码不会真的被拷贝到本地Python环境的”site-packages”目录下,而是在”site-packages”目录里创建一个指向当前项目位置的链接。这样如果当前位置的源码被改动,就会马上反映到”site-packages”里。

python setup.py develop

用于包的上传发布:

python setup.py register

setup.py内容


生成可执行文件的分发(安装到指定路径)

参考URL: https://amir.rachum.com/blog/2017/07/28/python-entry-points/

网上demo:

# 用来支持自动生成脚本,安装后会自动生成 /usr/bin/pmm 的可执行文件(windows管理员权限下会在Python文件夹的script里面生成pmm.exe)
# 该文件入口指向 pimm/pimm_module.py 的main 函数
entry_points={'console_scripts': ['pmm=pimm.pimm_module:main']},# 将 bin/foo.sh 和 bar.py 脚本,生成到系统 PATH中
# 执行 python setup.py install 后
# 会生成 如 /usr/bin/foo.sh 和 如 /usr/bin/bar.py
scripts=['bin/foo.sh', 'bar.py']

将python模块转变为命令行工具:
如果我们希望 module 中的函数不仅仅只是被其他 python 程序通过 import 调用,还可以直接在命令行中执行,那么可以做如下修改:(设置参数entry_points里的’console_scripts’)

# greeting_module.py
import pyjokesdef greeting_func(name):print("Hello,", name)print("Here is a joke for you:\n", pyjokes.get_joke())def main():import sysarg = sys.argv[1]greeting_func(arg)

# setup.py
from setuptools import setup, find_packagessetup(# ...,entry_points={ # 设置了在命令行中如何使用greeting_module中的main函数'console_scripts': ['greeting=greeting_pkg.greeting_module:main' # =.:]}
)

引入非Python文件

如果想引入静态文件,如JS、CSS、图片等,怎么做?
在项目根目录下添加一个”MANIFEST.in”文件夹。假设我们把所有静态文件都放在”static”子目录下,

我们在清单文件”MANIFEST.in”中,列出想要在包内引入的目录路径:

recursive-include myapp/static *
recursive-include myapp/xxx *

recursive-include表明包含子目录。

在”setup.py”中将include_package_data参数设为True:

#coding:utf8
from setuptools import setup
setup(name='MyApp', # 项目名version='1.0',# 版本号packages=['myapp'], # 包括在安装包内的Python包include_package_data=True # 启用清单文件MANIFEST.in
)

如果你想排除一部分文件,可以在”setup.py”中使用exclude_package_date参数:

setup(...include_package_data=True, # 启用清单文件MANIFEST.inexclude_package_date={'':['.gitignore']}
)

依赖管理

我们的项目会依赖其他Python模块,如何在setup.py中管理这些依赖呢?

修改”setup.py”文件,加入install_requires参数:

#coding:utf8
from setuptools import setup
setup(name&#61;&#39;MyApp&#39;, # 项目名version&#61;&#39;1.0&#39;,# 版本号packages&#61;[&#39;myapp&#39;], # 包括在安装包内的Python包include_package_data&#61;True, # 启用清单文件MANIFEST.inexclude_package_date&#61;{&#39;&#39;:[&#39;.gitignore&#39;]},install_requires&#61;[ # 依赖列表&#39;Flask>&#61;0.10&#39;,&#39;Flask-SQLAlchemy>&#61;1.5,<&#61;2.1&#39;]
)

可以通过dependency_links指定依赖包下载路径。install_requires中的包在安装时会先去PyPI下载并安装&#xff0c;如果包在PyPI中找不到&#xff0c;则会从dependency_links标识的URL中获取&#xff1a;

setup(...install_requires&#61;[ # 依赖列表&#39;Flask>&#61;0.10&#39;,&#39;Flask-SQLAlchemy>&#61;1.5,<&#61;2.1&#39;],dependency_links&#61;[ # 依赖包下载路径&#39;http://example.com/dependency.tar.gz&#39;]
)

路径应指向一个”egg”包或”tar.gz”包&#xff0c;也可以是个包含下载地址&#xff08;一个”egg”包或”tar.gz”包&#xff09;的页面。

编写 setup.py 文件, setup.py是python模块分发与安装的指导文件。
有了setup.py文件&#xff0c;运行下面这条命令&#xff0c;可以进行模块的安装。
与 .whl文件一样&#xff0c;先cmd到指定位置&#xff0c;然后输入&#xff1a;

python setup.py install

安装

$ pip install setuptools


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
author-avatar
闪亮登台
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有