From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 15 Feb 2022 01:15:07 +0300 From: "Vladimir D. Seleznev" To: ALT Linux Team development discussions Message-ID: References: <20220212222004.GB18800@altlinux.org> <20220212224102.GA19424@altlinux.org> <58066a78-9cf3-0e7f-3c22-c079040130b6@altlinux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <58066a78-9cf3-0e7f-3c22-c079040130b6@altlinux.org> Subject: Re: [devel] egg-info X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Feb 2022 22:15:07 -0000 Archived-At: List-Archive: List-Post: On Mon, Feb 14, 2022 at 12:02:28PM +0300, Stanislav Levin wrote: > > > 13.02.2022 04:21, Vladimir D. Seleznev пишет: > > > > > В egg-info содержится спецификация модуля, включая его описание, > > зависимости и другие метаданные. Важной эта информация становится тогда, > > когда какой-нибудь модуль или программа на python использует эту > > информацию в рантайме , например, через некоторые явные вызовы importlib > > (что происходит не всегда, чаще всего модули ограничиваются лишь вызовом > > import, с которым не возникает проблем), и кого-то из зависимых пакетов, > > в свою очередь, не предоставляет egg-info. В этом случае Python считает, > > что такого модуля не установлено, и выдаёт ошибку. > > Верно. > Чаще всего этой программой будет external Python installation tool > (например, pip или poetry). > https://docs.python.org/3/library/importlib.metadata.html Я на самом деле не рассматривал pip и другие внесистемные инсталяторы питона, меня беспокоит, что системные модули и программы могут сломаться в рантайме (и судя по тому, что мейнтейнеры патчат файлы (egg|dist)-info, пытаясь обойти эту проблему — они ломаются. > Примеры формата метаданных: > egg-info (директория или файл) - формат метаданных от setuptools > (используется при `python setup.py install --root`, legacy): > https://setuptools.pypa.io/en/latest/deprecated/python_eggs.html > > dist-info (используется при установке из wheel, modern PEP517) > > https://www.python.org/dev/peps/pep-0376/ > https://www.python.org/dev/peps/pep-0427/#the-dist-info-directory > > > > > Я не разбирался различных системах межмодульных зависимостей самого > > питона и их взаимоотношений между собой, но похоже, что если модуль > > предоставляет egg-файлы, то Python ожидает, что они будут предоставлены > > всеми зависимыми модулями. Я вижу два решения этой проблемы: или > > паковать egg-файлы у всех модулей, или не паковать вообще ни у кого. При > > этом, я не знаю, какие ещё side-эффекты вылезут в последнем случае. > > > > Отсутствие метаинформации отразится на инсталляторах Python - они > перестанут видеть third-party модули из system sitepackages > (устанавливаемых apt) - это приведет к попытке установке таких > distributions откуда-то (например, pypi.org), что не всегда приемлемо. > В любом случае нам нужно привести пакеты Python в консистентное состояние и паковать либо все с метаинформацией, либо все без неё. В Федоре есть явное требование упаковывать в пакеты Python (egg|dist)-info-файлы [1]. Я предлагаю делать так же. [1] https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_dist_info_metadata -- WBR, Vladimir D. Seleznev