相关疑难解决方法(0)

如何在Python中创建命名空间包?

在Python中,命名空间包允许您在多个项目中传播Python代码.当您想要将相关库作为单独的下载发布时,这非常有用.例如,使用目录Package-1Package-2in PYTHONPATH,

Package-1/namespace/__init__.py
Package-1/namespace/module1/__init__.py
Package-2/namespace/__init__.py
Package-2/namespace/module2/__init__.py
Run Code Online (Sandbox Code Playgroud)

最终用户可以import namespace.module1import namespace.module2.

定义命名空间包的最佳方法是什么,因此多个Python产品可以在该命名空间中定义模块?

python namespaces package

132
推荐指数
3
解决办法
5万
查看次数

使用pytest正确导入

我刚刚设置为使用python与Python 2.6.到目前为止,除了处理"导入"语句之外,它运行良好:我似乎无法以与我的程序相同的方式响应导入.

我的目录结构如下:

src/
    main.py
    util.py
    test/
        test_util.py
    geom/
        vector.py
        region.py
        test/
            test_vector.py
            test_region.py
Run Code Online (Sandbox Code Playgroud)

要运行,我python main.py从src/调用.

在main.py中,我导入了vector和region

from geom.region import Region
from geom.vector import Vector
Run Code Online (Sandbox Code Playgroud)

在vector.py中,我导入了区域

from geom.region import Region
Run Code Online (Sandbox Code Playgroud)

当我在标准运行中运行代码时,这些都可以正常工作.但是,当我从src /调用"py.test"时,它会一直退出导入错误.


一些问题和我的解决方案尝试

我的第一个问题是,当运行"test/test_foo.py"时,py.test无法直接"导入foo.py".我通过使用"imp"工具解决了这个问题.在"test_util.py"中:

import imp
util = imp.load_source("util", "util.py")
Run Code Online (Sandbox Code Playgroud)

这适用于许多文件.它似乎也暗示当pytest运行"path/test/test_foo.py"来测试"path/foo.py"时,它基于目录"path".

但是,"test_vector.py"失败了.Pytest可以找到并导入vector模块,但它无法找到任何vector的进口.使用pytest时,以下导入(来自"vector.py")都会失败:

from geom.region import *
from region import *
Run Code Online (Sandbox Code Playgroud)

这些都给出了表格的错误

ImportError: No module named [geom.region / region]
Run Code Online (Sandbox Code Playgroud)

我不知道接下来要做什么来解决这个问题; 我对Python中导入的理解是有限的.

使用pytest时处理导入的正确方法是什么?


编辑:非常黑客的解决方案

vector.py,我更改了import语句

from geom.region import Region
Run Code Online (Sandbox Code Playgroud)

简单地说

from region …
Run Code Online (Sandbox Code Playgroud)

python import pytest

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

标签 统计

python ×2

import ×1

namespaces ×1

package ×1

pytest ×1