python 101 - 从父文件夹

时间:2017-09-26 16:11:43

标签: python import module directory

所以,这是我的(好吧......凌乱)dir:

.
├── 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 文件中的

,但没有看到

“你是个白痴而且你不知道你在做什么”终端.. a.k.a:

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的方式使用它。我不想将此代码重新粘贴到tests文件夹中的每个单元测试中(它们位于不同的文件中。)

(那么如果我只是在 init .py中粘贴一次呢?你得到的错误是什么。但是我确实随机尝试了,看看发生了什么)

那么解决这个问题最优雅的方法是什么? (没有重新编写代码(或只是将其粘贴在函数中并多次调用它))

修改 到目前为止的评论没有解决任何问题,所以我会尝试使这一点更清楚。我找到了一个有效的解决方案。因此,在tests目录中的每个文件中,我必须重新粘贴该解决方案(或者调用与文件一样多次的相同功能。)这正是我想要避免的。我想要一个可以应用于测试目录中每个文件的解决方案,这样我就可以像普通一样使用父目录中的导入,而不是在每个文件中附加父路径。

1 个答案:

答案 0 :(得分: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) 

在tests目录中名为env.py

的文件中

并简单地添加

import env

在照常导入之前

请参阅: https://stackoverflow.com/a/23386287/2738183