Как использовать системные пакеты? - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь написать скрипт, который должен использовать 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)?

1 Ответ

0 голосов
/ 06 марта 2020

Мне кажется, это может быть связано с тем, что виртуальная среда не разрешает доступ к системным пакетам сайта . Если это действительно так, то обратите внимание, что это невозможно с поэзией на сегодняшний день. Существует открытый выпуск , а также запрос на получение .

Обходным путем может быть создание виртуальной среды без поэзии сначала Например:

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

, а затем использовать Стихи изнутри этой виртуальной среды, поскольку предполагается, что Стихи не создают виртуальную среду, когда она может обнаружить это он работает изнутри одного и будет использовать его вместо этого.


Очевидно, portage не является pip-устанавливаемым Python проектом, поэтому он наиболее скорее всего бесполезно указывать markers и path. Кроме того, каталоги site-packages обычно содержат установленные проекты, тогда как path должен указывать на местоположение, откуда Стихи ( pip ) могут загрузить установочный дистрибутив проекта.

Я полагаю, что как только проблема с --system-site-packages будет решена, тогда portage может быть указан как простая зависимость portage = "*".

...