使用本地副本的python包而不是已安装在site-packages中的包

4
我已经在site-packages目录中安装了一个基于Python的软件包。但是,我想学习代码运作原理,所以想加入很多print语句来了解代码正在做什么。但是最终我希望有一个干净的安装版本而不是所有的hack内容。
当然,我可以复制原始文件到其他地方,做一些修改后,最后再将所有原始文件复制回去。但这样真的很繁琐。至少,我想安装一个本地副本,并且让Python脚本优先使用此副本(也许是在脚本顶部放置适当的语句)。但是也许这甚至不是Python开发/修改的最佳方式。
对于我的问题,最好的解决方案是什么?我希望能够在不弄乱干净版本的情况下,修改并使用软件包。
3个回答

6
看一下 virtualenv。你可以基本上设置一个本地的Python环境,在其中安装任何你喜欢的东西,而不必与系统环境混淆。

1
虚拟环境建议是正确的,根据你实际使用的软件包,甚至可以不在虚拟环境中混淆site-packages。如果软件包基于setuptools,则只需简单地运行以下命令:
$ python setup.py develop

从源码的工作副本中运行,它不会被安装,而是被挂接到指向工作副本的虚拟环境中。优点:您可以在确定和非易失性的位置编辑(例如使用GIT或包维护者使用的任何SCM进行回滚)文件。


实际上,这就是按照他们的说明安装我的软件包的方式。我刚刚注意到我的软件包实际上并不在site-packages中,但是那里有一个名为[mypackage].egg-link的文件,它将我的本地安装目录列在了site-packages目录中。所以我想这就是它的工作原理?我可以使用git checkout将我的更改还原回实际的分发状态吗? - gammapoint
非常好,谢谢。我将您的回答更改为答案,因为它对我个人最有帮助(根据 stackexchange 指南)。 - gammapoint

1
这就是 Python virtualenv 工具的用途。它允许您创建一个本地 Python 环境,其中包含一组不同于系统安装的软件包。例如,我可以像这样操作:
$ virtualenv myenv
$ . myenv/bin/activate
$ pip install nifty-module

activate脚本会修改您的PATH,以便任何以以下内容开头的脚本都可以运行:

#!/usr/bin/env python

将使用您的虚拟环境中的Python,而不是系统Python,并且将看到在该环境中安装的模块。


感谢您提供的详细信息。虽然@deets的答案对我来说最简单(因为我没有意识到setup.py develop的作用),但这个答案似乎是最通用的,而且virtualenv看起来是一个非常有用的包,适用于未来的工作。 - gammapoint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接