我有以下文件夹结构;
myapp\
myapp\
__init__.py
tests\
test_ecprime.py
我的密码是
C:\Users\wwerner\programming\myapp\
我有以下测试设置:
import pytest
import sys
import pprint
def test_cool():
pprint.pprint(sys.path)
assert False
产生以下路径:
['C:\\Users\\wwerner\\programming\\myapp\\tests',
'C:\\Users\\wwerner\\programming\\envs\\myapp\\Scripts',
'C:\\Windows\\system32\\python34.zip',
'C:\\Python34\\DLLs',
'C:\\Python34\\lib',
'C:\\Python34',
'C:\\Users\\wwerner\\programming\\envs\\myapp',
'C:\\Users\\wwerner\\programming\\envs\\myapp\\lib\\site-packages']
当我尝试import myapp
时,我收到以下错误:
ImportError: No module named 'ecprime'
所以看起来它没有将当前目录添加到我的路径中。
将我的导入行更改为如下所示:
import sys
sys.path.insert(0, '.')
import myapp
然后我可以毫无问题地导入myapp
。
为什么运行pytest时我的当前目录没有显示在路径中?我唯一的解决方法是将.
插入sys.path
吗? (如果重要的话,我正在使用Python 3.4)
答案 0 :(得分:5)
AHAH!
在比较我cookiecutter repo的布局后,结果证明它比那更简单(也更好)。
tests/
__init__.py
test_myapp.py
将__init__.py
文件简单添加到我的测试目录后,我可以从主目录运行py.test
。
答案 1 :(得分:0)
sys.path会自动包含脚本的目录,而不是当前的工作目录。
我猜你的脚本放在tests
目录中。根据这个假设,您的代码应如下所示:
import sys
import os
ROOT_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(ROOT_DIR)
import myapp # Should work now
答案 2 :(得分:-1)