Arm*_*ken 5 python gentoo python-packaging 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/" }
]
Run Code Online (Sandbox Code Playgroud)
但这不起作用。Poetry 不会将路径目录中的代码视为 python 包。
[ValueError]
Directory /usr/lib64/python3.6/site-packages/portage does not seem to be a Python package
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点并使用系统作为运行测试的虚拟环境(我知道在主机系统中运行测试不是一个好主意,但是有一个安装了Portage的docker镜像)?
在我看来,这可能与虚拟环境不允许访问系统站点包有关。如果确实如此,那么请注意,这对于今天的诗歌来说是不可行的。有一个悬而未决的问题,以及一个拉取请求。
解决方法可能是首先创建没有诗歌的虚拟环境,例如:
path/to/python3 -m venv --system-site-packages .venv
Run Code Online (Sandbox Code Playgroud)
然后在这个虚拟环境中使用诗歌,因为当诗歌可以检测到它正在从虚拟环境中运行并使用它时,它应该不会创建虚拟环境。
显然portage不是一个可通过 pip 安装的markersPython 项目,因此指定和很可能是无用的path。此外,site-packages目录通常包含已安装的项目,而path应该指向诗歌(pip)可以下载项目的可安装发行版的位置。
我相信一旦问题--system-site-packages得到解决,portage就可以被列为一个简单的依赖项portage = "*"。