- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在一个存储库中工作,该存储库在一个名为 test
的目录中包含测试和一些测试帮助程序库。 (https://github.com/covid-projections/covid-data-model/tree/main/test)。神秘pip install dash
似乎打破了我们的测试。我在 debian 笔记本电脑上的 pyenv 中使用 python 3.7.9。我用一个非常简单的例子重现了这个问题:
激活新的 pyenv virtualenv 并使用 pip install git+https://github.com/pytest-dev/pytest
安装最新的 pytest .创建一个空的./test/__init__.py
以及以下两个文件:
$ cat ./test/real_test.py
from test import test_helpers
def test_one():
assert "foobar" == test_helpers.SOME_CONSTANT
$ cat ./test/test_helpers.py
SOME_CONSTANT = "foo"
运行 test/real_test.py 会按预期进行,但未通过测试。现在
pip install dash==1.19.0
并且测试无法运行
_____________________________________________________________________________ ERROR collecting test/real_test.py _____________________________________________________________________________
ImportError while importing test module '/home/thecap/tmp/nomodule/test/real_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
../../.pyenv/versions/3.7.9/lib/python3.7/importlib/__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
E ModuleNotFoundError: No module named 'test.real_test'
运行
pytest --import-mode=importlib test/real_test.py
(在
https://github.com/pytest-dev/pytest/issues/7408 的评论中找到)给了我一 pip 提示,它不包括用于搜索库的路径中的 cwd,因为它正在查看
test
在 pyenv 中,而不是在 cwd 中。
ImportError while importing test module '/home/thecap/tmp/nomodule/test/real_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test/real_test.py:1: in <module>
from test import test_helpers
E ImportError: cannot import name 'test_helpers' from 'test' (/home/thecap/.pyenv/versions/3.7.9/lib/python3.7/test/__init__.py)
运行后对我来说很神秘
pip uninstall dash
测试按预期运行
pytest test/real_test.py
但仍被
pytest --import-mode=importlib test/real_test.py
所破坏.
test/
移出至
tests/
将解决此问题,但我想了解为什么安装破折号会破坏事情,如果我们当前的设置有问题,请帮助其他人避免它。
最佳答案
这里的问题是您的本地 test
包阴影 test
标准库中的模块。一般来说,对任何 stdlib 模块进行命名是一种不好的做法,应该避免;然而,由于
The
test
package is meant for internal use by Python only. It is documented for the benefit of the core developers of Python. Any use of this package outside of Python’s standard library is discouraged as code mentioned here can change or be removed without notice between releases of Python.
The
test
package contains all regression tests for Python as well as the modulestest.support
andtest.regrtest
.test.support
is used to enhance your tests whiletest.regrtest
drives the testing suite.
test
不在回归测试运行之外使用。
future
的情况并非如此, 不过 -
it's importing test.support
when installing aliases ,导致 stdlib 的
test
出席
sys.modules
之前
pytest
开始测试收集。你安装了
futures
连同
dash
, 自
it's a direct dependency .现在,当您启动
pytest
运行,它会加载
dash
导入
future
的插件进口
test
之后,在尝试收集您的本地
test
时包,
pytest
导入失败,因为另一个
test
已经导入了!
test
打包成例如
tests
.这将停止 stdlib 模块的名称隐藏。
test
的导入。 :
conftest.py
在您的项目根目录中(不在
test
目录中,否则它将不起作用),并包含以下内容:
import sys
sys.modules.pop("test", None)
这将“取消导入”stdlib 的
test
, 制作您的本地
test
可在测试集合上导入的包。
sys.path
本地化
test
在 stdlib 之前可选择的包
python -m pytest ...
或
PYTHONPATH=. pytest ...
确保项目的根目录插入到
sys.path
中的站 pip 之前, 所以
import test
将始终以导入本地包结束。
关于python - pytest 与 pip install 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65910240/
pip install 和 pip download 有什么区别? $ pip --version pip 9.0.1 from c:\users\nahawk\python\python27\lib
我的控制台: desarrollador@desarrollador-HP-14-Notebook-PC1:~$ pip freeze Exception: Traceback (most rec
我用 pip 安装: $ sudo apt-get install python-setuptools, python-pip 但是当我尝试使用 pip 安装某些东西时出现此错误 sudo pip i
我通过 yum 安装了 python-pip 包(使用 Fedora 的更新仓库)。它不会将 pip 脚本添加到我的 PATH 中。 $ which pip /usr/bin/which: no pi
在Windows上使用python。当我尝试使用以下命令安装新库时。它会抛出错误,指出‘pip’未被识别为内部或外部命令、可操作程序或批处理文件。。但是当我使用代码的时候。它给了我一个有效的结果。。为
我收到了消息 You are using pip version 8.0.2, however version 8.1.2 is available. You should consider upgr
我安装了一个版本的包(例如 transformers 3.4.0) 我想安装一个较早的版本。我安装: pip install transformers==3.1.0 检查安装的版本时 pip free
我最近决定尝试在我的计算机上安装 tesseract 并运行 pip3 install tesseract-ocr。 然后它开始下载 cython,这提醒我 tesseract-ocr 不是我想要的,
默认情况下,pip搜索软件包名称和描述。对于某些软件包,这会导致大量的伪造命中,而找到我真正想要的伪命中是一件痛苦的事情。 我如何告诉点子我只想按名称搜索? 最佳答案 目前尚不可行,因为当前实现(第8
我如何使用 pip在 oh-my-zsh 中?我正在尝试安装 nltk通过 pip,但它告诉我 zsh: command not found: pip .当我查看 .oh-my-zsh/custom/
我有一个pip要求文件,其中包括Torch和Torchvision的特定于CPU的特定版本。我可以使用以下pip命令成功安装我的需求。 pip install --requirement azure-
pip 有一个 -q/--quiet 标志,可以从命令行理想地工作。我正在使用自动部署过程 (Amazon Elastic Beanstalk),并且这些工具使用 pip 从需求文件进行安装。 不幸的
我有一个带有附加功能的软件包,通常可以使用以下命令进行安装。 pip install package[extras] 但是,我也可以通过轮子安装相同的包,指定一些轮子 URL,如下所示。 pip in
我试过pip freeze 。我需要它只输出由换行符分隔的模块,例如 pip freeze ,除非没有版本号,因为我正在尝试创建一个自动升级程序,并且想要执行 pip install --upgrad
我尝试在pip.conf中使用带有index-url的pip。但是,我无法确保我们可以获得所有必需的 python 库。所以,我想知道 pip 支持是否在 pip.conf 的 [global] 部分
如何列出我直接使用 pip 安装的软件包, 省略已安装的任何依赖项? 我有一个运行的 virtualenv,命令如下 $ pip install A B C $ pip install X Y Z 因
这个问题在这里已经有了答案: How to upgrade all Python packages with pip (50 个回答) 2年前关闭。 我有一个 bash 命令来升级我安装的所有 pip
我正在尝试使用 ssh 运行一些 python 脚本以登录到谷歌计算引擎,但由于我没有权限访问我的用户中的 .cache/pip 文件夹,所以找不到所有已安装的 pip 模块是否有正确的方法来执行此操
有没有办法告诉 pip 永远不要为我的包创建轮缓存? 背景 我编写了一个供内部使用的包,当使用 setup.py 中的 cmdclass 安装时,它会设置一些符号链接(symbolic link)。如
我看过类似的帖子 pip install vs python3 -m pip install 这并没有真正澄清这个问题。 我是 Python 新手,只是遵循基本的 python 3 教程,他们提到 p
我是一名优秀的程序员,十分优秀!