导入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
编辑:该方法被重写,使其更清晰。