Bug 22596 - Неверный путь к noarch-каталогу
: Неверный путь к noarch-каталогу
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/python-base)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
: 18211
:
  Show dependency tree
 
Reported: 2009-12-22 09:22 by
Modified: 2010-01-29 15:26 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2009-12-22 09:22:45
В некоторых ситуациях питон возвращает неверный путь до noarch-каталога. В
качестве примера пострадавшего:

http://sisyphus.ru/ru/srpm/Sisyphus/python-module-Pyrex/spec

В качестве решения использован костыль:
if [ -d %archdir ]; then
mv %buildroot%archdir/Pyrex/Compiler/Lexicon.pickle \
%buildroot%python_sitelibdir/Pyrex/Compiler/
fi

Но хотелось бы видеть вылеченной причину, а не её следствие.
------- Comment #1 From 2009-12-22 10:53:41 -------
от rider@:

$ python
Python 2.6.4 (r264:75706, Dec 21 2009, 02:00:41)
[GCC 4.4.2 20091027 (ALT Linux 4.4.2-alt1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import distutils
>>> from distutils.sysconfig import get_python_lib
>>> get_python_lib();
'/usr/lib/python2.6/site-packages'

get_python_lib() в Pyrex используется в setup.py
------- Comment #2 From 2009-12-22 10:58:48 -------
Если приведённый rider@ код запустить на x86_64, результат будет:
'/usr/lib64/python2.6/site-packages'
------- Comment #3 From 2010-01-13 04:31:55 -------
(In reply to comment #0)
> В некоторых ситуациях питон возвращает неверный путь до noarch-каталога.

Может быть, это путь до arch-каталога?
------- Comment #4 From 2010-01-13 04:47:40 -------
(In reply to comment #1)
> от rider@:
> 
> $ python
> Python 2.6.4 (r264:75706, Dec 21 2009, 02:00:41)
> [GCC 4.4.2 20091027 (ALT Linux 4.4.2-alt1)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import distutils
> >>> from distutils.sysconfig import get_python_lib
> >>> get_python_lib();
> '/usr/lib/python2.6/site-packages'
> 
> get_python_lib() в Pyrex используется в setup.py
(In reply to comment #2)
> Если приведённый rider@ код запустить на x86_64, результат будет:
> '/usr/lib64/python2.6/site-packages'

В реализации get_python_lib() почему-то игнорируется документированный параметр
plat_specific.  Исправление, видимо, тривиальное.
------- Comment #5 From 2010-01-13 04:49:40 -------
(In reply to comment #4)
> В реализации get_python_lib() почему-то игнорируется документированный параметр
> plat_specific.  Исправление, видимо, тривиальное.

С другой стороны, неизвестно, сколько пакетов сломается, если get_python_lib()
починить.
------- Comment #6 From 2010-01-13 06:06:20 -------
Не знаю, как Вам, Дмитрий, а мне ситуация видится так:

лучше всё же починить (сам я это, наверно, быстро сделать не смогу, а у кого
можно попросить? Вас? at@?), а что сломается, я готов починить сам (благо,
недавно этот пусть уже проходил, но в значительно бОльших масштабах).

В конце концов, бранч 5.1 создан недавно, так что следующее отбранчевание, где
окажется новый питон, будет ещё очень нескоро, за это время можно всё это
перечинить по нескольку раз.
------- Comment #7 From 2010-01-15 08:48:44 -------
Поправил так:

From: Eugeny A. Rostovtsev (REAL) real at altlinux.org <real@altlinux.org>
Date: Thu, 14 Jan 2010 21:48:07 +0000 (+0700)
Subject: Fix get_python_lib
X-Git-Tag: 2.6.4-alt3~1
X-Git-Url:
http://git.altlinux.org/people/real/packages/python.git?p=python.git;a=commitdiff_plain;h=22265349065b8a586a525c5cc69e4d7dd352ddc9

Fix get_python_lib
---

diff --git a/Python/Lib/distutils/sysconfig.py
b/Python/Lib/distutils/sysconfig.py
index 44ae992..05daa02 100644
--- a/Python/Lib/distutils/sysconfig.py
+++ b/Python/Lib/distutils/sysconfig.py
@@ -15,6 +15,7 @@ import os
 import re
 import string
 import sys
+import platform

 from distutils.errors import DistutilsPlatformError

@@ -115,8 +116,18 @@ def get_python_lib(plat_specific=0, standard_lib=0,
prefix=None):
         prefix = plat_specific and EXEC_PREFIX or PREFIX

     if os.name == "posix":
-        libpython = os.path.join(prefix,
-                                 "lib", "python" + get_python_version())
+        if plat_specific == 0:
+          libpython = os.path.join(prefix,
+            "lib", "python" + get_python_version())
+        elif plat_specific == 1 and platform.architecture()[0] == "32bit":
+          libpython = os.path.join(prefix,
+            "lib", "python" + get_python_version())
+        elif plat_specific == 1 and platform.architecture()[0] != "32bit":
+          libpython = os.path.join(prefix,
+            "lib64", "python" + get_python_version())
+        else:
+          libpython = os.path.join(prefix,
+            "lib", "python" + get_python_version())
         if standard_lib:
             return libpython
         else:
diff --git a/python-2.6-alt-lib64.patch b/python-2.6-alt-lib64.patch
index b4110b0..08da7c5 100644
--- a/python-2.6-alt-lib64.patch
+++ b/python-2.6-alt-lib64.patch
@@ -17,17 +17,6 @@
          'headers': '$base/include/python/$dist_name',
          'scripts': '$base/bin',
          'data'   : '$base',
---- a/Python/Lib/distutils/sysconfig.py
-+++ b/Python/Lib/distutils/sysconfig.py
-@@ -100,7 +100,7 @@ def get_python_lib(plat_specific=0, standard_lib=0,
prefix=None):
- 
-     if os.name == "posix":
-         libpython = os.path.join(prefix,
--                                 "lib", "python" + get_python_version())
-+                                 "lib64", "python" + get_python_version())
-         if standard_lib:
-             return libpython
-         else:
 --- a/Python/Lib/site.py
 +++ b/Python/Lib/site.py
 @@ -265,9 +265,13 @@ def addsitepackages(known_paths):



см.
http://git.altlinux.org/people/real/packages/python.git?p=python.git;a=commitdiff;h=22265349065b8a586a525c5cc69e4d7dd352ddc9
------- Comment #8 From 2010-01-15 12:50:31 -------
(В ответ на комментарий №7)
> Поправил так:
Тогда это не WORKSFORME
------- Comment #9 From 2010-01-15 13:24:34 -------
Просто это ни на чём ещё не отразилось, собрал парочку arch и многострадальный
python-module-Pirex.

Но может вылезти при очередной тестовой пересборке сизифа на каком-то другом
пакете, и в нём нужно будет использовать функцию так, как она сама же и
описана.

Но раз FIXED, спорить не буду ;)
Пострадавшие переоткроют.
------- Comment #10 From 2010-01-15 13:33:23 -------
Статус относится к состоянию баги, а не Сизифа.
WORKSFORME - это значит, вы решили ничего не делать, вас и так всё устроило :)
Пересборка покажет? :)
------- Comment #11 From 2010-01-15 13:45:18 -------
"Пересборка покажет? :)"

Обязательно. Некоторые пакеты, будучи arch, валили свои файлы в %_libexecdir, и
в спеках приходилось делать хак: перенос в %_libdir.

Такие пакеты придётся чинить.
------- Comment #12 From 2010-01-16 01:55:09 -------
(In reply to comment #11)
> "Пересборка покажет? :)"
> 
> Обязательно. Некоторые пакеты, будучи arch, валили свои файлы в %_libexecdir, и
> в спеках приходилось делать хак: перенос в %_libdir.
> 
> Такие пакеты придётся чинить.

Видимо, не один десяток пакетов придётся чинить.  Вот, например,
свежепострадавший fetchmailconf:
http://git.altlinux.org/tasks/18725/build/1/x86_64/log

Просьба анонсировать факт починки одного, разлома другого и методы исправления
последствий последнего.
------- Comment #13 From 2010-01-16 10:21:36 -------
"Видимо, не один десяток пакетов придётся чинить.  Вот, например,
свежепострадавший fetchmailconf:
http://git.altlinux.org/tasks/18725/build/1/x86_64/log"

Я предлагаю такое решение. Здесь идёт речь о пакете, часть подпакетов которых
на самом деле noarch. Питону это просто так не объяснишь, он если в самом
начале не встречает BuildArch: noarch, то дальше уже поздно. Сделал новый
макрос: %_python_set_noarch
Его нужно использовать перед любым другим питоньим макросом.

С fetchmailconf получилось совсем просто:
http://git.altlinux.org/people/real/packages/fetchmail.git?p=fetchmail.git;a=commitdiff;h=e3422fb6834f6a340671afe04c628036fac4b095

Предлагаю принять такой вариант. Проверил, собирается.

"Просьба анонсировать факт починки одного, разлома другого и методы исправления
последствий последнего."

Тут разломы могут быть разными, это бы лучше на вики сразу. Но в devel@ пару
строк черкну.
------- Comment #14 From 2010-01-17 06:05:31 -------
#18725 FAILED #2 sisyphus/mike fetchmail.git=6.3.13-alt4

Миш, у тебя нет ключевого фикса, о котором я говорил: в спеке после
BuildPreReq: rpm-build-python отсутствует макрос %_python_set_noarch


Потому и FAILED.
------- Comment #15 From 2010-01-17 20:27:07 -------
(In reply to comment #13)
> С fetchmailconf получилось совсем просто:
> http://git.altlinux.org/people/real/packages/fetchmail.git?p=fetchmail.git;a=commitdiff;h=e3422fb6834f6a340671afe04c628036fac4b095
> Предлагаю принять такой вариант. Проверил, собирается.
Спасибо, смержил и отправил.

> "Просьба анонсировать факт починки одного, разлома другого и методы исправления
> последствий последнего."
> Тут разломы могут быть разными, это бы лучше на вики сразу. Но в devel@ пару
> строк черкну.
Анонсировать стоит и если не вся картинка сразу выяснилась.

(In reply to comment #14)
> #18725 FAILED #2 sisyphus/mike fetchmail.git=6.3.13-alt4
> Миш, у тебя нет ключевого фикса, о котором я говорил: в спеке после
> BuildPreReq: rpm-build-python отсутствует макрос %_python_set_noarch
> Потому и FAILED.
Дело в том, что этот alt4 моложе твоего alt4, на полсуток раньше сделан. :) 
Отправил alt5.

PS: посмотри у меня в girar-utils утилитку girar-download, вдруг пригодится:
------- Comment #16 From 2010-01-17 21:42:35 -------
"Анонсировать стоит и если не вся картинка сразу выяснилась.

А такой анонс уже был: что сборка части пакетов сломается. Фраза слишком общая,
согласен, но я не ясновидящий, чтобы видеть всё наперёд. У меня собралось, а
то, что кое-что может и не собраться, здесь же, выше по обсуждению говорилось.

Согласен, после исправления get_python_lib нужно было сразу в devel@ написать.
Но сейчас все и так уже в курсе:
http://lists.altlinux.org/pipermail/devel/2010-January/179244.html