导入python模块不在路径上

时间:2012-04-15 11:21:01

标签: python import external python-module

我有一个模块foo,包含util.py和bar.py。

我想在IDLE或python会话中导入它。我该怎么做?

我找不到有关如何导入不在当前目录或默认python PATH中的模块的文档。 尝试import "<full path>/foo/util.py"后, 和from "<full path>" import util

我能得到的最接近的是

import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')

这让我在Windows 7上拒绝了权限。

4 个答案:

答案 0 :(得分:66)

一种方法是简单地修改path

import sys
sys.path.append('C:/full/path')
from foo import util,bar

请注意,这需要foo成为python包,即包含__init__.py文件。如果您不想修改sys.path,可以also modify the PYTHONPATH environment variableinstall the module on your system。请注意,这意味着可能会无意中加载该目录中的其他目录或.py文件。

因此,您可能希望使用imp.load_source。它需要文件名,而不是目录(允许当前用户读取的文件):

import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')

答案 1 :(得分:5)

您可以使用PYTHONPATH环境变量自定义模块搜索路径,也可以手动修改sys.path目录列表。

请参阅python.org上的Module Search Path文档。

答案 2 :(得分:2)

试一试

import sys
sys.path.append('c:/.../dir/dir2')
import foo

答案 3 :(得分:1)

按照phihag的提示,我有这个解决方案。只需将源文件的路径指定给load_src,它就会加载它。您还必须提供名称,以便可以使用此名称导入此模块。我更喜欢这样做,因为它更明确:

def load_src(name, fpath):
    import os, imp
    return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath))

load_src("util", "../util.py")
import util

print util.method()

另一种(不那么明确)的方式是:

util = load_src("util", "../util.py")    # "import util" is implied here

print util.method()    # works, util was imported by the previous line

编辑:重写方法以使其更清晰。