诗歌对环境之外的软件包的不必要访问

时间:2019-10-07 17:31:22

标签: python-poetry

据我了解,默认情况下,诗歌创建的虚拟环境不会访问该环境以外的任何软件包,甚至不会访问系统目录中安装的软件包(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构建102和103)。我唯一的理论是本地测试能够提取该软件包的系统安装信息。这些测试是通过poetry run py.test运行的,目的是使本地测试与在新鲜环境中的CI设置中完成的测试相匹配,我该怎么做才能使本地env与CI env最匹配?与系统安装隔离真的是问题吗?谢谢

2 个答案:

答案 0 :(得分:0)

  

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

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

从长远来看,您应该采用从不安装与单个项目系统范围相关的python软件包的思路。其中包括开发依赖项,例如pytest,或者在您的情况下为hypothesis-请将其卸载。 poetry是与系统相关的极少数python软件包之一,应这样安装。另外,这就是为什么建议安装poetry的方法不是pip而是get-poetry.py的原因。

短期而言,您可以使用blocks global site-packages by defaultvirtualenv手动设置虚拟环境(但是poetry构建的环境可能具有相同的默认设置) 。要强制执行本地安装的软件包,您可以在运行测试之前设置执行路径:

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

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

(env)$ python -m pytest

答案 1 :(得分:0)

我遇到错误https://github.com/sdispater/poetry/issues/571 我需要再输入8个字符。显然,SO并不对简洁性持有相同的看法。