导入python模块不在path上

我有一个模块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上的权限被拒绝。

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

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

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

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

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

您可以使用PYTHONPATH环境variables自定义模块searchpath,也可以手动修改sys.path目录列表。

请参阅python.org上的模块searchpath文档。

试试这个

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

在phihag的提示之后,我有这个解决scheme。 只要给源文件的pathload_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 

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