首页 > 解决方案 > 如何使用系统安装包?

问题描述

我正在尝试编写脚本,它应该使用 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/" }
] 

但它不起作用。Poetry 不将路径目录中的代码视为 python 包。

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

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

标签: pythonpython-packaginggentoopython-poetry

解决方案


在我看来,这可能与不允许访问系统站点包的虚拟环境有关。如果确实如此,那么请注意,这在今天的诗歌中是不可行的。有一个未解决的问题,以及一个拉取请求

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

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

然后在这个虚拟环境中使用诗歌,因为当诗歌可以检测到它在一个虚拟环境中运行并使用它时,它不应该创建一个虚拟环境。


显然portage不是pip 可安装的markersPython 项目,因此指定and很可能是无用的path。此外site-packages,目录通常包含已安装的项目,而path应该指向一个位置,诗歌( pip ) 可以从该位置下载项目的可安装发行版。

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


推荐阅读