我有一个文件夹结构,这样Py.test无模块名为*
App
--App
--app.py
--Docs
--Tests
--test_app.py
在我test_app.py file
,我有一个线导入我的应用程序模块。当我在根文件夹上运行py.test时,出现有关没有名为app的模块的错误。我应该如何配置?
我有一个文件夹结构,这样Py.test无模块名为*
App
--App
--app.py
--Docs
--Tests
--test_app.py
在我test_app.py file
,我有一个线导入我的应用程序模块。当我在根文件夹上运行py.test时,出现有关没有名为app的模块的错误。我应该如何配置?
因此您从/App
运行py.test
。您确定/App/App
在您的$PYTHONPATH
?
如果不是,试图import app
的代码将失败,并显示此消息。
编辑0:包括我的评论下面,为了完整性的信息。
尝试导入应用程序只有在/App/App
内执行时才会成功,但在此情况并非如此。您可能希望通过将__init__.py
放入其中,并将其更改为from App import app
以符合要求。
编辑1:根据要求,从我的第二个评论进一步解释下面。
通过将__init__.py
放在/App/App
之内,该目录就变成了一个包。这意味着您可以从它导入,只要它 - 目录 - 在$PYTHONPATH
中可见。即如果/App
位于$PYTHONPATH
中,则可以从App import app
开始执行。您当前的工作目录会自动添加到$PYTHONPATH
,因此当您从/App
运行脚本时,导入将会起作用。
我已经有一个__init__.py
文件中/App/App
目录,并希望没有任何路径压延魔法运行从项目根检验:
python -m pytest tests
输出立即看起来是这样的:
➟ python -m pytest tests
====================================== test session starts ======================================
platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/andrew/code/app, inifile:
plugins: teamcity-messages-1.17
collected 46 items
... lines omitted ...
============================= 44 passed, 2 skipped in 1.61 seconds ==============================
你能找出启动'py.test'直接无法发现'/ App/App'的原因吗? –
well python确实将当前目录添加到pythonpath,所以你仍然使用path-mangling magic,顺便说一句,这就是为什么它的工作原理! – Danny
使用Python 3并在类似的项目布局上获得相同的错误,我通过向我的tests
模块添加__init__
文件来解决此问题。
$ touch tests/__init__.py
我不是在包装和进口伟大的,但我认为这有助于pytest
哪里工作目标App
模块的位置。
我在'/ App'上运行'pip install -e .',所以包被安装到'/ usr/local'库中。我想这会将我的文件夹添加到路径中? – zsljulius
无论你在哪里安装'pip',没有理由将'/ App/App'自动添加到'$ PYTHONPATH'中。 “导入应用程序”的尝试只有在*'/ App/App'内执行时才会成功,在这里不是这种情况。您可能希望通过在其中放置'__init __。py'来将'/ App/App'制作为一个包,并将您的导入更改为'app from'from App import app'。 –
我的测试现在可以运行。我仍然对$ PYTHONPATH部分感到困惑。如果我将__init__.py添加到我的'/ App/App'文件夹中,python会自动将'/ App/App'文件夹插入到路径中吗? – zsljulius