相关疑难解决方法(0)

pytest的问题'导入错误:没有名为YadaYadaYada的模块'

我使用easy_install在mac上安装pytest并开始为具有文件结构的项目编写测试,如下所示:

repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py
Run Code Online (Sandbox Code Playgroud)

py.test在repo目录中运行时,一切都按预期运行

但是当我在linux或windows上尝试相同的东西时(两者都有pytest 2.2.3),每当它从我的应用程序路径首次导入某些东西时就会吠叫.比如说from app import some_def_in_app

我是否需要编辑我的PATH才能在这些系统上运行py.test?有没有人经历过这个?

python unit-testing pytest

194
推荐指数
12
解决办法
14万
查看次数

Python 3中的包不需要__init__.py吗?

我使用的是Python 3.5.1.我在这里阅读了文档和包部分:https://docs.python.org/3/tutorial/modules.html#packages

现在,我有以下结构:

/home/wujek/Playground/a/b/module.py
Run Code Online (Sandbox Code Playgroud)

module.py:

class Foo:
    def __init__(self):
        print('initializing Foo')
Run Code Online (Sandbox Code Playgroud)

现在,在/home/wujek/Playground:

~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Run Code Online (Sandbox Code Playgroud)

同样,现在在家里,超级文件夹Playground:

~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Run Code Online (Sandbox Code Playgroud)

实际上,我可以做各种各样的事情:

~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Run Code Online (Sandbox Code Playgroud)

为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并bmodule.py要导入的时候Python的路径指向Playground文件夹?

这似乎已经从Python 2.7改变了:

~ $ PYTHONPATH=Playground …
Run Code Online (Sandbox Code Playgroud)

python package python-3.x

146
推荐指数
5
解决办法
6万
查看次数

py.test找不到模块

这个问题与以下问题有关,但在那里没有回答:

我有一个python模块具有以下树结构:

mcts
|- setup.py
|- mcts
 |- __init__.py
 |- uct.py
 |- toy_world_state.py
 |- test
  |- test_uct.py
  |- test_toy_world_state.py
Run Code Online (Sandbox Code Playgroud)

我在某个目录中创建了virtualenv

$ mkdir virtual
$ virtualenv --system-site-packages virtual
$ source virtual/bin/activate
Run Code Online (Sandbox Code Playgroud)

然后我安装我的包:

$ cd /path/to/mcts
$ pip install -e .
Run Code Online (Sandbox Code Playgroud)

现在我尝试运行测试:

$ py.test mcts
================================================== test session starts ==================================================
platform linux -- Python 3.4.2 -- py-1.4.26 -- pytest-2.6.4
collected 0 items / 2 errors 

======================================================== ERRORS =========================================================
__________________________________ ERROR collecting mcts/test/test_toy_world_state.py ___________________________________
mcts/test/test_toy_world_state.py:4: in <module>
    from mcts.toy_world_state import * …
Run Code Online (Sandbox Code Playgroud)

python pytest

14
推荐指数
2
解决办法
2万
查看次数

如何使用 pytest 解决 ImportError

已经 有人对此主题提出疑问有时程序员会__init__.py在某些地方放置一些路径,通常有人说应该使用绝对路径。但是,我无法让它在这里工作:

\n

如何从包中导入类以便 pytest 中的测试运行并可以使用代码?

\n

目前我得到 pytest 或通过各自运行的代码。

\n

我的示例项目结构是

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 testingonly\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cli.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 testingonly.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_testingonly.py\n
Run Code Online (Sandbox Code Playgroud)\n

__init__.py在这两种情况下都是空文件。

\n
$ cat testingonly/cli.py\n"""Console script for testingonly."""\nfrom testingonly import Tester\n\ndef main(args=None):\n    """Console script for testingonly."""\n    te = Tester()\n    return 0\n\nmain()\n
Run Code Online (Sandbox Code Playgroud)\n
$ cat testingonly/testingonly.py\n"""Main module."""\nclass Tester():\n    def __init__(self):\n        print("Hello")\n
Run Code Online (Sandbox Code Playgroud)\n

正如预期的那样:

\n
$ python3 testingonly/cli.py\nHello\n
Run Code Online (Sandbox Code Playgroud)\n

然而,尝试测试这一点失败了:

\n
$ pytest\n========================================================= test session starts =========================================================\nplatform linux -- …
Run Code Online (Sandbox Code Playgroud)

python python-import pytest

8
推荐指数
1
解决办法
2万
查看次数