使用本地Python包而非site-packages中的版本

4 投票
3 回答
3313 浏览
提问于 2025-04-18 09:09

我在我的site-packages目录里安装了一个基于Python的包。不过,我想学习这个代码是怎么工作的,所以我想在里面加很多打印语句,这样我就能理解代码在做什么。但最后我还是想要一个干净的安装版本,不想留下一堆我改动的东西。

当然,我可以把原始文件复制到别的地方,做一些修改,然后最后再把原始文件复制回来。但这样真的很麻烦。至少,我希望能安装一个这个Python包的本地副本,然后让Python脚本优先使用这个副本(也许可以在脚本的开头加一些合适的语句)。不过,也许这并不是做Python开发或修改的最佳方法。

那么,解决我这个问题的最佳方法是什么呢?我想在这个包上进行修改(并使用这个包),但又不想搞乱我干净的版本。

3 个回答

1

这就是Python的virtualenv工具的用途。它可以让你创建一个本地的Python环境,这个环境里的包和你电脑上系统自带的包是分开的。举个例子,我可以这样做:

$ virtualenv myenv
$ . myenv/bin/activate
$ pip install nifty-module

当你运行activate这个脚本时,它会修改你的PATH设置。这样一来,任何以:

#!/usr/bin/env python

开头的脚本,就会使用你虚拟环境里的Python,而不是系统自带的Python,并且可以看到在这个环境中安装的模块。

6

看看这个 virtualenv。它的意思是,你可以在本地创建一个独立的Python环境,在这个环境里你可以随意安装你想要的东西,而不用担心会影响到系统的其他设置。

1

关于虚拟环境的建议是正确的,实际上根据你的具体包的情况,你甚至可以不去碰虚拟环境里的 site-packages。

如果这个包是基于 setuptools 的,只需在它的源代码工作副本中运行一个简单的命令

$ python setup.py develop

这样它就不会被安装,而是直接链接到这个工作副本。这样做的好处是:你可以在一个明确且不会变化的位置编辑文件(比如使用 GIT 或者其他版本控制工具,包的维护者可以随时回滚更改)。

撰写回答