如何使用系统安装包?

How to use system installed packages?

我正在尝试编写脚本,应该使用 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 目录中的代码不被 Poetry 视为 python 包。

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

有没有办法做到这一点并使用系统作为 运行 测试的虚拟环境(我知道 运行 在主机系统中测试不是一个好主意,但是有一个docker 安装了 Portage 的图像?

在我看来,这可能与不允许访问 系统站点包 的虚拟环境有关。如果确实如此,请注意,截至目前,poetry 尚不可行。不过有一个open issue, as well as a pull request

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

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

然后在此虚拟环境中使用 poetry,因为 poetry 应该不会在检测到虚拟环境时创建虚拟环境它是一个中的 运行,将使用它来代替。


显然 portage 不是 pip-installable Python 项目,因此指定 markerspath。另外 site-packages 目录通常包含已安装的项目,而 path 应该指向 poetry (pip)可以下载该项目的可安装发行版。

我相信一旦 --system-site-packages 的问题得到解决,那么 portage 可以被列为一个简单的依赖项 portage = "*".