2013-07-28 129 views
3

我有以下目录结构的Python:如何导入模块中的其他模块

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

如何导入import_abc.pylib

当我尝试在import_abc.py导入库

我获得以下错误

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

此链接可能会对您有所帮助。 http://effbot.org/zone/import-confusion.htm – Sid

+1

看看这个线程相对进口:http://stackoverflow.com/questions/4348452/python-packaging-for-relative-imports-again -sorry – sjbrown

回答

2

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

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

谢谢!似乎它的工作..但我不得不追加outdir路径 –

+0

@NikhilRupanawar很高兴帮助,你可以接受答案,如果它为你工作。 –

3

花一分钟来看看你想要达到什么样的:你要导入的 模块abc.py这是包11b的一部分,因此为了正确导入它,你需要指定其包装,它是:

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的一些很好的解释。如果您使用IDE(例如PyDev),通常它会为每个项目自动设置PYTHONPATH。但是如果你想自己完成,你需要设置PYTHONPATH环境变量。

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

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

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

对于相对路径,python使用__name__来解析路径。假定模块__name__package1.package2.module3,并且module3使用from ..packge3 import module4以上包的形式导入模块。 Python将它们结合起来得到package1.packge3.module4。详情已在this的帖子中说明。

我的溶液加入/outside目录作为/outdir父目录和通过/outdir下加入__init__.py使outdir作为一个包。

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