导入Python模块不在路径(Import python module NOT on path)

2019-06-23 15:26发布

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

我想它导入空闲或Python会话。 我怎么去呢?

我能找到如何在当前目录或默认的Python路径中导入模块不是没有文档。 尝试后import "<full path>/foo/util.py" ,并from "<full path>" import util

我能得到的最接近的是

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

这给了我许可的Windows 7拒绝。

Answer 1:

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

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')


Answer 2:

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

见模块搜索路径上python.org文档。



Answer 3:

试试这个

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


Answer 4:

继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

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



文章来源: Import python module NOT on path