56

我有一个模块 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

4 回答 4

77

一种方法是简单地修改你的路径

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

请注意,这要求 foo 是一个 python 包,即包含一个__init__.py文件。如果不想修改sys.path,也可以修改PYTHONPATH环境变量在系统上安装模块。请注意,这意味着.py可能会无意中加载该目录中的其他目录或文件。

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

import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')
于 2012-04-15T11:32:32.443 回答
5

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

请参阅python.org 上的模块搜索路径文档。

于 2012-04-15T11:26:29.163 回答
2

试试这个

import sys
sys.path.append('c:/.../dir/dir2')
import foo
于 2012-04-15T11:29:09.993 回答
2

按照 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

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

于 2014-01-01T16:27:58.497 回答