使用pytest时在同一包中导入的ModuleNotFoundError

我将会 :

我的项目结构似乎是正确的。

setup.py
mypackage/
    __init__.py
    __main__.py
    main.py
    script1.py #import script2 
    script2.py
tests/
    test_script2.py

使用script1.py导入文件script2.py'import script2'

我可以使用以下命令运行代码而不会出现错误:

python mypackage
python mypackage/main.py

不幸的是,当我尝试使用执行测试pytestpython -m pytest出现错误时,没有命名模块script2(以下完整消息)。我以可编辑模式安装了程序包pip install -e .

我可以通过使用包名称为的导入来解决此问题,import mypackage.script2 as script2但随后,所有克隆我的存储库的人都必须在运行pip之前安装包。否则将mypackage找不到错误

我希望能够在不安装pip的情况下运行此代码,并可以选择单独运行每个脚本文件。
您能建议我替代解决方案吗?

仓库:pytest-imports-demo

来自pytest的错误消息:

(venv) lecho:~/pytest-imports-demo$ pytest
================================================= test session starts ==================================================
platform linux -- Python 3.6.7, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
rootdir: /home/lecho/pytest-imports-demo
collected 0 items / 1 errors                                                                                           

======================================================== ERRORS ========================================================
________________________________________ ERROR collecting tests/test_script2.py ________________________________________
ImportError while importing test module '/home/lecho/pytest-imports-demo/tests/test_script2.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_script2.py:2: in <module>
    import mypackage.script1 as script1
mypackage/script1.py:1: in <module>
    import script2
E   ModuleNotFoundError: No module named 'script2'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=============================================== 1 error in 0.05 seconds ================================================
德米特里·托卡列夫(Dmitry Tokarev):

在文件pytest-imports-demo/mypackage/script1.py导入script2包中,应执行以下任一操作:

from mypackage import script2

要么

from . import script2

还需要__init__.pypytest-imports-demo/tests/目录添加空文件

至于“我希望能够在不进行pip安装的情况下运行此代码,并可以选择分别运行每个脚本文件。” 通过使脚本可执行并提供脚本的完整路径或将这些脚本的目录路径放入$ PATH环境变量中,可以完成此操作。另外,也可以通过pip安装来完成(但setup.py文件中需要其他设置)。

但是可以运行测试而无需pip install打包。

我打开了PR:https : //github.com/lecho/pytest-imports-demo/pull/1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在同一包python中导入文件

Python:从同一包中导入子模块或子包

如何在同一包中导入__init__.py内部定义的类?

Java导入类在同一包中

Python:尝试从导入的包中导入模块时出现“ ModuleNotFoundError”

如何使用相对导入在pytest中导入python包

R如何在同一包中使用文件

Java构造函数无法在同一包中使用

用gradle创建的jar,当导入一个类时,看不到同一包中的其他类

从同一包中读取文件

同一包-多个存储库

@SpringBootApplication在同一包中?

为什么有些Java代码再次导入同一包?

如何在同一包中同时包含commonJs和es模块导入语法-Webpack

从同一个项目中导入包

为什么Java类可以在不显式导入该类的情况下直接在同一包下使用另一个类?

Python 3-在同一目录中导入.py文件-ModuleNotFoundError:没有名为“ __main __。char”的模块;'__main__'不是一个包

在包__init__内修补函数,并在同一包内的模块内使用它

使用父包名称导入子包时出现ModuleNotFoundError

在同一目录中导入模块时为何使用ModuleNotFound?

IntelliJ编译时无法在同一包中找到类

为什么同一包的一类无法访问另一包?

导入另一个包时出现ModuleNotFoundError

Chocolatey允许并排使用同一包装的多个版本吗?

在 Scala 中使用同一包上的特征中定义的类。

使用foreach时是否在R中导入“并行”包

在导入pkg_resources之前,无法从同一命名空间树中的包中导入

同一包中的功能可见性

Python:测试并加载同一包的不同git commit