2014-01-29 83 views
0

最近启动了一个新的Python项目。Python导入模块

我正在解决导入模块错误,我试图从同一目录中导入模块。

我正在关注解决方案here但我的情况稍有不同,因此我的脚本无法运行。

我的项目目录如下:

dir-parent 
    ->dir-child-1 
    ->dir-child-2 
    ->dir-child-3 
    ->__init__.py (to let python now that I can import modules from here) 
    ->module1 
    ->module2 
    ->module3 
    ->module4 
    ->main.py 

在我main.py脚本,我在同一个目录导入这些模块如下:

from dir-parent.module1 import class1 

当我运行使用这个脚本方法它会抛出一个导入错误,说没有名为dir-parent.module1的模块(这是错误的,因为它存在)。

我再改import语句:

from module1 import class1 

,这似乎解决了错误,但是,我工作的代码已经被使用了超过25年,它一直通过进口模块这个方法,再加上它指向dir-parent目录的代码。

我只是想知道是否有我丢失或需要做的解决这个问题,而不改变这些导入语句和遗留代码?

编辑:我使用PyCharm,如果你想保持代码不变正在流失PyCharm

+1

Python模块搜索路径中包含“dir-parent”目录吗? – BrenBarn

+0

您可能正在执行'dir-parent'内的main.py。尝试向上更改一个目录并运行'python -m dir_parent.main'。你可以在这个优秀的博客文章中找到更多信息:http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/ –

回答

1

,我想你将不得不增加dir-parent到PYTHONPATH。对于为例,增加您的main.py的顶部以下内容:

import os, sys 

parent_dir = os.path.abspath(os.path.dirname(__file__)) # get parent_dir path 
sys.path.append(parent_dir) 
+0

像这样? parent_dir = os.path.abspath(os.path.dirname(C:\ dev \ hpact \ src))抱怨它不是有效的语法...我使用的是Windows机器 – SeekingAlpha

+0

不,您可以简单地复制和粘贴: '__file__'是引用当前脚本的变量。 –

+0

'parent_dir = os.path.abspath(os.path.dirname(__ file__))' sys.path.append(“C:\ dev \ hpact \ src \ hpact”)仍抱怨同样的问题 – SeekingAlpha

0

Python的进口和寻路是一种痛苦。这是我为具有主模块的模块所做的。我不知道是否pythonic。

# Add the parent directory to the path 
CURRENTDIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) 
if CURRENTDIR not in sys.path: 
    sys.path.append(CURRENTDIR)