2017-09-26 55 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