2017-09-26 73 views
1

所以,這裏是我的(好吧..雜亂)導演:蟒蛇101 - 訪問從父文件夾的模塊最好的辦法

. 
├── app 
│   ├── __init__.py 
│   ├── analyze_text.py 
│   ├── images.py 
│   ├── main.py 
│   ├── messages.py 
│   ├── process_text.py 
│   ├── requirements.txt 
│   ├── response.py 
│   └── tests 
│    ├── __init__.py 
│    ├── analyze_text_test.py 
│    ├── test_process_text.py 
│    └── unit_tests.py 
└── setup.py # no idea what's going on with this 

所有我想要做的是,只需使用

from analyze_text import AnalyzeText 

analyze_text_test.py文件,沒有看到

「你是個白癡,你不知道你在做什麼」,在終端..又名:

ImportError: No module named (whatever) 

我發現這個解決方案:

https://stackoverflow.com/a/11158224/2738183

import os,sys,inspect 
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) 
parentdir = os.path.dirname(currentdir) 
sys.path.insert(0,parentdir) 

import mymodule 

其中一期工程,但它是Janky。

爲什麼?

因爲...

我正在使用它在Janky的方式。我不想將這些代碼重新粘貼到測試文件夾中的每個單元測試中(這些文件位於不同的文件中)。

(那麼如果我只是在初始狀態下初始化 .py ?你得到的是一個錯誤,但我做了隨機試驗,只是爲了看看發生了什麼)

那麼,解決這個問題最優雅的方法是什麼? (不repasting代碼(或只是一個函數堅持到底,把它多次))

編輯: 的意見至今都沒有解決任何事情,所以我會盡力使這一點更加明確。我找到了一個可行的解決方案。因此,在測試目錄中的每個文件中,我必須重新粘貼該解決方案(或者多次調用相同的函數,因爲有文件)。這正是我想要避免的。我想要一個可以應用於test目錄中每個文件的解決方案,這樣我就可以像普通文件一樣使用父目錄中的導入,而不是在每個文件中追加父路徑。

+0

從'..analyze_text導入AnalyzeText'工作嗎? –

+0

我將編輯以包含該信息。我想我已經說過了。 –

+0

如果將'sys.path.insert'行放入__init__.py中,會出現什麼錯誤?應該工作據我所知 –

回答

0

沒關係。我發現我喜歡堆棧溢出的優雅解決方案。

這相當於把

import os,sys,inspect 
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) 
parentdir = os.path.dirname(currentdir) 
sys.path.insert(0,parentdir) 

文件內

和進口照常

看到之前簡單地增加

import env 

命名的測試目錄env.py內:https://stackoverflow.com/a/23386287/2738183