为什么在Windows使用pytest时,当前目录没有显示在路径中?

2024-06-26 10:34:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下文件夹结构

myapp\
  myapp\
     __init__.py
  tests\
     test_ecprime.py

我的密码是

^{pr2}$

我有以下测试设置:

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?(如果重要的话,我会使用python3.4)


Tags: pathpytestimport路径systestsusers
3条回答

在系统路径自动包含脚本的目录,而不是当前的工作目录。在

我猜你的脚本放在tests目录中。基于此假设,您的代码应该如下所示:

import sys
import os

ROOT_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(ROOT_DIR)

import myapp # Should work now

使用环境变量^{}。在

在Windows中:

set PYTHONPATH=.
py.test

在Unix中:

^{pr2}$

啊哈!在

在比较了mycookiecutter repo的布局之后,结果发现它比这简单得多(也更好)。在

tests/
    __init__.py
    test_myapp.py

只需将__init__.py文件添加到我的test dir,就可以从主目录运行py.test。在

相关问题 更多 >