0

据我了解,默认情况下,由诗歌创建的虚拟环境不会访问该环境之外的任何包,甚至不包括安装在系统目录中的包(这样的功能正在添加到https://github.com/sdispater /poetry/issues/1393我认为这意味着默认行为是相反的)。开发 altair_recipes https://github.com/piccolbo/altair_recipes/我有几个实例忘记向 pyproject.toml 添加新的 dep,测试在本地成功,但在加载该包时在 travis 上失败。通过使用诗歌添加添加依赖项,可以迅速解决这种情况。最近的例子,我开始使用假设进行一些测试,忘记添加它,一切都在本地工作,去发布,失败。添加为 dev dep,传递本地,传递远程,完成(参见https://travis-ci.org/piccolbo/altair_recipes build 102 和 103)。我唯一的理论是本地测试能够获取该软件包的系统安装。测试运行poetry run py.test为了使本地测试与在新环境中的 CI 设置中完成的测试相匹配,我该怎么做才能使本地环境与 CI 环境最匹配?与系统安装隔离真的是问题吗?谢谢

4

2 回答 2

0

我遇到了错误https://github.com/sdispater/poetry/issues/571 我还需要 8 个字符才能发布此内容。显然是这样,并且对简洁性持不同意见。

于 2019-10-13T01:37:16.717 回答
0

我唯一的理论是本地测试能够获取该软件包的系统安装。

鉴于我在 python 中打包的个人经验,我认为这是根本原因。现在,这个问题有一个长期和短期的解决方案:

从长远来看,您应该采取从不安装绑定到单个项目系统范围内的 python 包的心态。这包括开发依赖项,例如pytest或在您的情况下hypothesis- 卸载它们。poetry是为数不多的与系统相关的 python 包之一,应该这样安装。另外附带说明,这就是为什么推荐的安装poetry方式不是pip但是get-poetry.py.

短期内,您可以使用 手动设置虚拟环境,virtualenv默认情况下会阻止全局站点包(但poetry构建的环境可能具有相同的默认设置)。要强制执行本地安装的包,您可以在运行测试之前设置执行路径:

$ PATH=$(dirname $(poetry run which python)) pytest

如果您已经激活了虚拟环境(您可以通过运行来完成poetry shell),您还可以将这些工具作为 python 模块运行:

(env)$ python -m pytest
于 2019-10-11T18:25:40.493 回答