Python:如何在其他模块中导入模块

时间:2013-07-28 14:50:37

标签: python import packaging

我有以下目录结构

outdir
     |--lib
            |--- __init__.py
            |--- abc.py
     |--indir
            |--- __init__.py
            |---- import_abc.py

如何在lib中导入import_abc.py

当我尝试在import_abc.py

中导入lib时

我收到以下错误

  Traceback (most recent call last):
  File "import_abc.py", line 1, in <module>
  import lib
  ImportError: No module named lib

4 个答案:

答案 0 :(得分:3)

花点时间看看你想要实现的目标:你想要导入  模块abc.py是包lib的一部分,所以为了正确导入它,你需要指定它在哪个包中:

from lib import abc

import lib.abc as my_import

在旁注中,请查看the Python Tutorial chapter on modules

鉴于@Noelkd的评论,我忘了告诉你PYTHONPATH这是一个环境变量,它包含Python将寻找模块的文件夹(如Java CLASSPATH)。您需要将根文件夹放在PYTHONPATH中,以避免使用sys.path.append进行一些调整。

在Bash中:

export PYTHONPATH=<abs. path to outdir>

例如,我已将outdir放入桌面:

export PYTHONPATH=~/Desktop/outdir

进口就像魅力一样。

您可以在this blog post中找到有关导入机制和PYTHONPATH的一些很好的解释。

N.B。:如果您使用的是IDE(例如PyDev),通常会为每个项目自动设置PYTHONPATH。但如果您想自己完成所有操作,则需要设置PYTHONPATH环境变量。

答案 1 :(得分:2)

__init__.py中添加outdir文件,然后执行:

#import_abc.py
import sys
sys.path.append('/home/monty/py')   #path to directory that contains outdir
from outdir.lib import abc

答案 2 :(得分:2)

我遇到过类似的问题。一般有两种导入模块的方法。一个是绝对路径,另一个是相对路径。

对于绝对路径,python使用sys.path来解析路径,如上面的答案所示。但我个人不喜欢操纵sys.path

对于相对路径,python使用__name__解析路径。假设模块的__name__package1.package2.module3,而模块3使用from ..packge3 import module4在上层包中导入模块。 Python会将它们组合起来以获得package1.packge3.module4。详细信息已在this帖子中说明。

我的解决方案是添加/outside目录作为/outdir的父目录,并通过在outdir下添加__init__.py/outdir作为一个包。

然后,您可以在from ..lib.abc import cls文件中添加import_abc.py。相对路径应该有效

答案 3 :(得分:1)

import sys
sys.path.append('../lib')
import abc