【问题标题】:How to use system installed packages?如何使用系统安装包?
【发布时间】:2020-06-19 03:39:02
【问题描述】:

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

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

【问题讨论】:

  • 最后一个问题,hub.docker.com/r/gentoo/stage3-amd64 可能吗?
  • 看起来这是虚拟环境创建方式的问题。使用venv,我想我会使用--system-site-packages 选项,以便能够导入portage。不知道如何用 poetry 做类似的事情。但应该没有必要使用markerspath。无论如何,我相信path 应该指向 poetry (pip) 可以下载可安装发行版并安装它的位置。但是 portage 已经安装好了,无论如何site-packages 只包含已安装的包(而不是可安装的)。

标签: python python-packaging gentoo python-poetry


【解决方案1】:

在我看来,这可能与不允许访问系统站点包的虚拟环境有关。如果确实如此,那么请注意,截至今天,这对于 poetry 来说是不可行的。不过有一个open issue,还有一个pull request

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

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 = "*"

【讨论】:

  • 是的,确实如此。谢谢!
猜你喜欢
  • 2016-01-26
  • 1970-01-01
  • 2019-09-05
  • 2013-05-25
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多