2016-09-27 25 views
1

我讀了各種答案(relative import),但都沒有工作導入一個簡單的類。我有這樣的結構:如何使用python在工作目錄中導入一個簡單的類?

__init__.py (empty) 
my_script.py 
other_script.py 
my_class.py 

我想用my_class.py兩個腳本(my_script.pyother_script.py)。像所有的答案表明,我只是用:

from .my_class import My_class 

SystemError: Parent module '' not loaded, cannot perform relative import

我使用Python的3.5PyCharm 2016年1月2日我總是得到。我需要配置__init__.py嗎?我如何導入一個簡單的類?

編輯

所有文件都在工作目錄。我只是使用Pycharm來運行,並且在嘗試導入類時我沒有問題。

+4

請不要將您的文件'class.py'命名爲'class'在Python中有意義。 –

+0

大聲笑,這只是爲了容易理解的問題。但好點 – Rodrigo

回答

1

確保您當前的工作目錄是而不是包含這些文件的那個。例如,如果到__init__.py的路徑是spam/eggs/__init__.py,請確保您正在目錄spam中工作 - 或者,/path/to/spam位於sys.path中,並且您在第三位工作。無論哪種方式,請勿嘗試在目錄eggs中工作。要測試您的代碼,請說import eggs

推理如下。由於您使用的是__init__.py,因此您顯然希望將這個文件集合作爲package。工作作爲一個整體,一個目錄必須同時滿足以下條件:

  1. 它包含一個名爲__init__.py
  2. 目錄是搜索路徑的一部分(或父目錄是你的當前工作目錄);實際上,軟件包目錄必須僞裝成文件,即可以找到與完全可以找到單個文件模塊相同的方式。

如果你的工作包目錄,你可能無法滿足標準2.你可以從那裏直接的import my_class,當然,但你想「相對進口」的東西是一個功能只有一個完整的工作包才能支持。

+0

洙...問題是工作目錄。我不能在工作目錄中導入類?是的,所有的文件都在工作目錄中! – Rodrigo

+0

您可以從那裏自行導入my_class',但是如果您想將多個文件包裝在一個包中,請不要使用包目錄本身。 (見編輯) – jez

相關問題