6

我有以下文件夹结构;

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)

4

3 回答 3

9

啊啊!

在比较了我的cookiecutter repo的布局之后,结果证明它比这更简单(也更好)。

tests/
    __init__.py
    test_myapp.py

__init__.py文件简单地添加到我的测试目录允许我py.test从我的主目录运行。

于 2014-01-21T21:10:06.657 回答
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
于 2014-01-21T17:42:16.380 回答
-1

使用环境变量PYTHONPATH

在 Windows 中:

set PYTHONPATH=.
py.test

在 Unix 中:

PYTHONPATH=. py.test
于 2014-01-21T17:35:27.777 回答