2014-01-29 273 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)