如何使用系统安装的软件包?

时间:2020-03-06 11:45:43

标签: python python-packaging gentoo python-poetry

我正在尝试编写脚本,该脚本应使用Portage API。但是Portage python软件包在PyPi中不可用,但是即使可用,也没有任何意义,因为应该在具有软件包数据库和配置的某些已配置系统中使用它。

我试图编写以下丑陋的代码:

[tool.poetry.dependencies]
python = "^3.6"

click = "^7.0-r1"

portage = [
{ markers = "python_version ~= '3.6' and sys_platform == 'linux'", path = "/usr/lib64/python3.6/site-packages/portage/" },
{ markers = "python_version ~= '3.7' and sys_platform == 'linux'", path = "/usr/lib64/python3.7/site-packages/portage/" },
{ markers = "python_version ~= '3.8' and sys_platform == 'linux'", path = "/usr/lib64/python3.8/site-packages/portage/" },
{ markers = "python_version ~= '3.9' and sys_platform == 'linux'", path = "/usr/lib64/python3.9/site-packages/portage/" }
] 

但是它不起作用。诗歌没有将 path 目录中的代码视为python软件包。

[ValueError]
Directory /usr/lib64/python3.6/site-packages/portage does not seem to be a Python package

是否可以执行此操作并将系统用作运行测试的虚拟环境(我知道在主机系统中运行测试不是一个好主意,但是有安装了Portage的docker映像)?

1 个答案:

答案 0 :(得分:3)

在我看来,这可能与不允许访问系统站点包的虚拟环境有关。如果确实如此,那么请注意,到目前为止,对于诗歌来说,这是不可行的。虽然有open issuepull request

一种解决方法可能是先创建没有诗歌的虚拟环境,例如:

path/to/python3 -m venv --system-site-packages .venv

,然后在该虚拟环境中使用 poetry ,因为 poetry 在可以检测到从一个内部运行时不会创建虚拟环境,并且会改用它。


显然 portage 不是一个 pip可安装的 Python项目,因此指定markerspath很有用。此外,site-packages目录通常包含已安装的项目,而path应该指向 poetry pip )可以从中下载可安装发行版本的位置。该项目。

我相信一旦解决了--system-site-packages的问题,就可以将 portage 列为简单的依赖项portage = "*"