Python从小白到高手实现系列三百九十六:自定义setup 命令
令人惊讶的是,setuptools 和distutils 都没有uninstall(卸载)命令。署目录(site-packages)中创建一个指向项目源代码的特殊链接,而不是将整个包复制过去。入口点是类或函数的命名链接,通过setuptools 中的一些API 变得可用。此外,在同时处理多个相关的包时,使用setuptools 直接从自己的。安装一个包时,对setup.py 脚本的一个替代方法是使
利用distutils 可以创建新的命令。新的命令可以用一个入口点(entry point)来注
册,这是由setuptools 引入的,是一种将包定义为插件的简单方法。
入口点是类或函数的命名链接,通过setuptools 中的一些API 变得可用。任何应用
都可以扫描所有已注册的包,并且将链接代码作为插件使用。
要想链接新的命令,可以在setup 调用中使用entry_points 元数据,代码如下:
setup(
name=“my.command”,
entry_points=“”"
[distutils.commands]
my_command = my.command.module.Class
“”"
)
所有命名链接都集中在已命名的部分(named section)。distutils 被加载时,它将
扫描在distutils.commands 中注册的链接。
许多提供可扩展性的Python 应用都使用了这一机制。
在开发期间使用包
使用setuptools 主要是用于构建并分发包。但是,你仍然需要知道如何使用它们直
接从项目源代码安装包。其原因很简单。在向PyPI 提交包之前,最好测试一下你的打包代
码是否正常工作。最简单的测试方法就是安装它。如果你将坏的软件包发送到仓库中,那
么你需要增加版本号才能重新上传。
在最终发行版之前测试你的代码是否被正确打包,可以避免不必要的版本号增加,当
然也可以节省时间。此外,在同时处理多个相关的包时,使用setuptools 直接从自己的
源代码安装可能也是必要的。
setup.py install
install 命令可以将包安装到Python 环境中。如果之前没有构建过的话,它会尝试
构建包,然后将结果注入到Python 树中。如果提供了源代码发行版,那么可以在临时文件
夹中将其解压,然后用这个命令安装。install 命令还将安装在install_requires 元
数据中定义的依赖。这是通过查看Python 包索引上的包来完成的。
安装一个包时,对setup.py 脚本的一个替代方法是使用pip。它是PyPA 推荐的工
具,因此即使在本地环境为了开发而安装时也应该使用它。要想从本地源代码中安装一个
包,你可以运行下面这个命令:
pip install
2.卸载包
令人惊讶的是,setuptools 和distutils 都没有uninstall(卸载)命令。幸
运的是,使用pip 可以卸载任何Python 包:
pip uninstall
在系统级的包上尝试卸载操作可能很危险。这也是为什么使用虚拟环境进行开发很重
要的另一个原因。
3.setup.py develop 或pip -e
使用setup.py install 安装的包会被复制到当前环境的site-packages 目录下。也
就是说,无论何时你修改了包的源代码,都需要重新安装它。这常常是集中开发过程中的
一个问题,因为很容易忘记需要再次执行安装。这就是为什么setuptools 提供了一个额
外的develop 命令,允许我们在开发模式(development mod)下安装包。这个命令在部
署目录(site-packages)中创建一个指向项目源代码的特殊链接,而不是将整个包复制过去。
可以编辑包的源代码而无需重新安装,并且它在sys.path 中可用,就像正常安装一样。
pip 也可以用这种模式来安装包。这个安装选项叫作可编辑模式(editable mode),可
以使用install 命令的-e 参数来启用,代码如下:
pip install -e
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)