首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python库中导入模块的正确方法是什么?

在python库中导入模块的正确方法是什么?
EN

Stack Overflow用户
提问于 2013-12-26 10:55:59
回答 1查看 1.3K关注 0票数 1

当您编写python库,并希望从另一个模块中导入一个模块时,正确的方法是什么,以便在从外部导入库和从库目录运行某些单元测试时,导入都可以工作?

如果你这样做了

代码语言:javascript
运行
复制
import some_module
from some_module import something

它在从目录库运行时工作,但从外部导入时会生成ImportError: No module named 'some_module'

你能做到的

代码语言:javascript
运行
复制
from . import some_module
import my_library.some_other_module
from .some_module import something

但是,如果您从放置在同一目录中的unittest导入库,则它将无法工作。

最后,您可以使用sys.path和/或将单元测试移到其他目录。

什么是最好的解决方案?

编辑:为了说明清楚,我想在库的顶部目录中使用python -m unittest运行单元测试。到目前为止,我通过添加

代码语言:javascript
运行
复制
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

到单元测试文件的开头。作为另一种选择,可以编写一个简短的shell脚本,将父目录添加到PYTHONPATH,然后运行unittest。我想知道是否有更好的方法来处理它?

EN

Stack Overflow用户

发布于 2013-12-26 11:43:26

看看模块搜索路径上的文档

当导入名为垃圾邮件的模块时,解释器首先搜索具有该名称的内置模块。如果找不到,则在变量spam.py提供的目录列表中搜索名为sys.path的文件。从以下位置初始化sys.path:

  • 包含输入脚本(或当前目录)的目录。
  • PYTHONPATH (与shell变量路径具有相同语法的目录名称列表)。
  • 与安装相关的默认设置。

如果您编写了一个库,测试代码通常应该以与库的用户相同的方式与库进行接口。这可能意味着通过设置PYTHONPATH环境变量或在默认第三方模块位置安装模块,将模块添加到搜索路径。

我建议使用自动测试发现选项从包含模块的基本目录中运行测试。

代码语言:javascript
运行
复制
python -m unittest discover (python >= 2.7)

这将递归地查找与test_*.py匹配的文件(即模块dir中的文件),但应该设置相对于父dir的python。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20783605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档