让Python使用我目录中的代码(而不是/usr/...中的)
我正在尝试使用一个已经安装在我(Ubuntu)系统上的Python库。我查看了这个库,编辑了一些文件,并写了一个小脚本来测试我的修改。尽管我把我的脚本放在和这个库相同的文件夹里,但似乎Python还是在使用安装的版本(也就是在/usr/share/pyshared/...
里的那个)。
这是我的目录结构:
src
+ my_package
- my_script.py
+ library_package
- lots_of_code
我该怎么告诉Python使用我目录里的代码,而不是安装的那个呢?
5 个回答
import sys
from os.path import join, dirname, pardir
sys.path.insert(0, join(dirname(__file__), pardir))
这段话的意思是,它会先在src
这个文件夹里查找任何的Python模块。即使你在其他地方也安装了同名的模块,这样做会让Python优先加载本地的那个模块。
让我们考虑一个更普遍的问题。在/usr/share/pyshared/目录下,有很多模块。假设你想要覆盖其中的一个模块,名字叫xyz.py。这个模块还会用到/usr/shared/pyshared里的其他模块。
假设我们创建一个文件夹$HOME/mylibs,并把$HOME添加到Python的sys.path中。
现在,每当我们需要使用xyz时,我们可以这样做:
from mylibs import xyz
如果我们想要恢复使用原来的xyz模块,可以尝试:
import xyz # picks up from /usr/shared/pyshared
我在想,这种方法是否更通用。你只需要覆盖那些你想要替换的模块,其他的模块照常使用。
你可以通过设置 PYTHONPATH
这个环境变量来告诉 python
在哪里寻找模块:
当你导入一个名为 spam 的模块时,解释器会先在当前目录中寻找一个叫 spam.py 的文件,然后再去
PYTHONPATH
环境变量中指定的目录列表里找。这个列表的格式和 shell 的PATH
变量是一样的,也就是一系列的目录名称。如果PYTHONPATH
没有设置,或者在这些地方找不到文件,解释器就会继续在一个默认的路径中查找,这个路径通常和你安装的系统有关;在 Unix 系统上,这个默认路径一般是 .:/usr/local/lib/python。
来源于 http://docs.python.org/tutorial/modules.html#the-module-search-path