蟒蛇101 - 访问从父文件夹的模块最好的办法
问题描述:
所以,这里是我的(好吧..杂乱)导演:蟒蛇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目录中每个文件的解决方案,这样我就可以像普通文件一样使用父目录中的导入,而不是在每个文件中追加父路径。
答
没关系。我发现我喜欢堆栈溢出的优雅解决方案。
这相当于把
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
从'..analyze_text导入AnalyzeText'工作吗? –
我将编辑以包含该信息。我想我已经说过了。 –
如果将'sys.path.insert'行放入__init__.py中,会出现什么错误?应该工作据我所知 –