导入python模块不在路径上

Vor*_*t3x 49 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')
Run Code Online (Sandbox Code Playgroud)

这给了我在Windows 7上的权限被拒绝.

phi*_*hag 68

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

import sys
sys.path.append('C:/full/path')
from foo import util,bar
Run Code Online (Sandbox Code Playgroud)

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

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

import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')
Run Code Online (Sandbox Code Playgroud)

  • @EMS Python文档[明确提到`sys.path`](http://docs.python.org/tutorial/modules.html#the-module-search-path).如果用户无法修改`sys.path`,那么`imp`模块也很可能被阻塞(请注意,Python的`sys.path`与[系统的`PATH`]没有任何关系(http:// en. wikipedia.org/wiki/PATH_(variable))).就个人而言,我不认为按名称而不是文件名加载模块是愚蠢的; 它允许系统范围内安装Python包(例如,在2.5上你可能想要提供替代的`json`模块).添加了警示说明. (5认同)
  • 因为你还没有定义`method`,只有``util`中的````.如果需要,可以定义`method = util.method`. (2认同)

ice*_*ime 5

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

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