我正在尝试编写脚本,该脚本应使用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不将path目录中的代码视为python软件包。
[ValueError]
Directory /usr/lib64/python3.6/site-packages/portage does not seem to be a Python package
是否可以执行此操作并将系统用作运行测试的虚拟环境(我知道在主机系统中运行测试不是一个好主意,但是有安装了Portage的docker映像?
在我看来,这可能与不允许访问系统站点程序包]的虚拟环境有关。如果确实如此,那么请注意,从今天起,用poetry这是不可行的。虽然有open issue和pull request。
一种解决方法可能是先创建虚拟环境而不先使用poetry
,例如:,因为poetry应该能够在一个虚拟环境中检测到正在运行,而不会使用它,而是创建一个虚拟环境。path/to/python3 -m venv --system-site-packages .venv
然后在此虚拟环境中使用poetry
显然地portage
不是pip-installable Python项目,因此指定markers
和path
很可能毫无用处。另外,site-packages
目录通常包含已安装的项目,而path
应指向poetry(pip)可以从中下载项目的可安装发行版本的位置。我相信--system-site-packages
的问题得到解决后,portage
portage = "*"
。