相关疑难解决方法(0)

Python模块和Python包之间有什么区别?

Python模块和Python包之间有什么区别?

另请参阅:"package"和"module"之间的区别(对于其他语言)

python module package

511
推荐指数
6
解决办法
19万
查看次数

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模块的绝对与显式相对导入

我想知道在Python应用程序中导入包的首选方法.我有这样的包结构:

project.app1.models
project.app1.views
project.app2.models
Run Code Online (Sandbox Code Playgroud)

project.app1.views进口project.app1.modelsproject.app2.models.有两种方法可以实现这一点.

绝对进口:

import A.A
import A.B.B
Run Code Online (Sandbox Code Playgroud)

或者使用PEP 328Python 2.5中引入的显式相对导入:

# explicit relative
from .. import A
from . import B
Run Code Online (Sandbox Code Playgroud)

什么是最pythonic的方式来做到这一点?

python package python-import

73
推荐指数
3
解决办法
4万
查看次数

如何使用PEP 420名称空间包对项目进行Pytest?

我正在尝试使用Pytest测试一个较大的项目(〜100k LOC,1k个文件),最终我还有其他几个类似的项目。这不是标准的Python包 ; 它是高度定制的系统的一部分,至少在短期内,我几乎无权更改。测试模块与代码集成在一起,而不是放在单独的目录中,这对我们很重要。配置与此问题相当相似,在那里的回答也可能提供有用的背景。

我遇到的问题是,这些项目几乎只使用PEP 420隐式名称空间包;也就是说,__init__.py任何软件包目录中几乎没有文件。我还没有看到必须将其作为名称空间软件包的情况,但是鉴于此项目与其他也具有Python代码的项目结合在一起,这种情况可能会发生(或者已经发生,而我只是没有注意到) 。

考虑一个如下所示的存储库。(对于它的可运行副本,包括下面描述的测试,请0cjs/pytest-impl-ns-pkg从GitHub进行克隆。)假定以下所有测试都在中project/thing/thing_test.py

repo/
    project/
        util/
            thing.py
            thing_test.py
Run Code Online (Sandbox Code Playgroud)

我对测试配置有足够的控制权,我可以确保 sys.path对输入的设置进行适当设置,以使被测代码能够正常工作。也就是说,以下测试将通过:

def test_good_import():
    import project.util.thing
Run Code Online (Sandbox Code Playgroud)

但是,Pytest正在使用其通常的系统从文件中确定包名称,给出的包名称不是用于我的配置的标准包名称,并将项目的子目录添加到中sys.path。因此,以下两个测试失败:

def test_modulename():
    assert 'project.util.thing_test' == __name__
    # Result: AssertionError: assert 'project.util.thing_test' == 'thing_test'

def test_bad_import():
    ''' While we have a `project.util.thing` deep in our hierarchy, we do
        not have a top-level `thing` module, so this import should fail. …
Run Code Online (Sandbox Code Playgroud)

pytest

5
推荐指数
1
解决办法
701
查看次数

标签 统计

python ×3

package ×2

pytest ×2

module ×1

python-import ×1

unit-testing ×1