ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] help me! python.req!
@ 2007-11-16 21:29 Anton Farygin
  2007-11-16 21:46 ` Anton Farygin
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Anton Farygin @ 2007-11-16 21:29 UTC (permalink / raw)
  To: ALT Devel discussion list

Люди добрые, поможите кто чем может... что делать с этим MemoryError.

x86_64, hasher, branch-4.0

Error while parsing 
"/usr/src/tmp/mythplugins-buildroot/usr/share/mythtv/mythvideo/scripts/fetch_poster.py"
Traceback (most recent call last):
   File "/usr/lib/rpm/python.req.py", line 133, in ?
     lis = 
parser.suite(open(src).read().replace("\r\n","\n")).tolist(line_info=1)
MemoryError
error: /bin/sh failed
error: Failed to find Requires


Rgds,
Rider



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [devel] help me! python.req!
  2007-11-16 21:29 [devel] help me! python.req! Anton Farygin
@ 2007-11-16 21:46 ` Anton Farygin
  2007-11-16 22:04 ` Alexey Tourbin
  2007-11-17  5:01 ` [devel] python encodings Alexey Tourbin
  2 siblings, 0 replies; 8+ messages in thread
From: Anton Farygin @ 2007-11-16 21:46 UTC (permalink / raw)
  To: ALT Linux Team development discussions

Anton Farygin пишет:
> Люди добрые, поможите кто чем может... что делать с этим MemoryError.
> 
> x86_64, hasher, branch-4.0
> 
> Error while parsing 
> "/usr/src/tmp/mythplugins-buildroot/usr/share/mythtv/mythvideo/scripts/fetch_poster.py"
> Traceback (most recent call last):
>    File "/usr/lib/rpm/python.req.py", line 133, in ?
>      lis = 
> parser.suite(open(src).read().replace("\r\n","\n")).tolist(line_info=1)
> MemoryError
> error: /bin/sh failed
> error: Failed to find Requires

Воспроизводится только в hasher. На той же машине python.req.py 
отрабатывает без проблем в хост-системе.

Может быть это поможет:

open("fetch_poster.py", O_RDONLY)       = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=7266, ...}) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7266, ...}) = 0
lseek(3, 0, SEEK_CUR)                   = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7266, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) 
= 0x2aaaabdd6000
lseek(3, 0, SEEK_CUR)                   = 0
read(3, "#!/usr/bin/python\n# -*- coding: "..., 4096) = 4096
read(3, "len(links) > 0:\n\t\t\t\tfor link in "..., 4096) = 3170
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x2aaaabdd6000, 4096)            = 0
write(2, "Error while parsing \"fetch_poste"..., 37Error while parsing 
"fetch_poster.py") = 37
write(2, "\n", 1
)                       = 1
write(2, "Traceback (most recent call last"..., 35Traceback (most recent 
call last):
) = 35
open("/usr/lib/rpm/python.req.py", O_RDONLY) = 3
write(2, "  File \"/usr/lib/rpm/python.req."..., 52  File 
"/usr/lib/rpm/python.req.py", line 133, in ?
) = 52
fstat(3, {st_mode=S_IFREG|0755, st_size=6124, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) 
= 0x2aaaabdd6000
read(3, "#! /usr/bin/env python\n\nfrom __f"..., 4096) = 4096
read(3, ".splitext(os.path.basename(src))"..., 4096) = 2028
write(2, "    ", 4    )                     = 4
write(2, "lis = parser.suite(open(src).rea"..., 78lis = 
parser.suite(open(src).read().replace("\r\n","\n")).tolist(line_info=1)
) = 78
close(3)                                = 0
munmap(0x2aaaabdd6000, 4096)            = 0
write(2, "MemoryError", 11MemoryError)             = 11
write(2, "\n", 1
)                       = 1
rt_sigaction(SIGINT, {SIG_DFL}, {0x2aaaaad7a630, [], SA_RESTORER, 
0x2aaaab01e400}, 8) = 0
futex(0x63ca60, FUTEX_WAKE, 1)          = 0
futex(0x6012a0, FUTEX_WAKE, 1)          = 0
futex(0x6012a0, FUTEX_WAKE, 1)          = 0
futex(0x6012a0, FUTEX_WAKE, 1)          = 0
exit_group(1)                           = ?
Process 31503 detached




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [devel] help me! python.req!
  2007-11-16 21:29 [devel] help me! python.req! Anton Farygin
  2007-11-16 21:46 ` Anton Farygin
@ 2007-11-16 22:04 ` Alexey Tourbin
  2007-11-16 22:04   ` Anton Farygin
  2007-11-17  5:01 ` [devel] python encodings Alexey Tourbin
  2 siblings, 1 reply; 8+ messages in thread
From: Alexey Tourbin @ 2007-11-16 22:04 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 624 bytes --]

On Sat, Nov 17, 2007 at 12:29:59AM +0300, Anton Farygin wrote:
> Люди добрые, поможите кто чем может... что делать с этим MemoryError.
> 
> x86_64, hasher, branch-4.0
> 
> Error while parsing 
> "/usr/src/tmp/mythplugins-buildroot/usr/share/mythtv/mythvideo/scripts/fetch_poster.py"
> Traceback (most recent call last):
>    File "/usr/lib/rpm/python.req.py", line 133, in ?
>      lis = 
> parser.suite(open(src).read().replace("\r\n","\n")).tolist(line_info=1)
> MemoryError
> error: /bin/sh failed
> error: Failed to find Requires

Workaround -- вручную добавить python-modules-encodings в BuildRequires.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [devel] help me! python.req!
  2007-11-16 22:04 ` Alexey Tourbin
@ 2007-11-16 22:04   ` Anton Farygin
  0 siblings, 0 replies; 8+ messages in thread
From: Anton Farygin @ 2007-11-16 22:04 UTC (permalink / raw)
  To: ALT Devel discussion list

Alexey Tourbin пишет:
> On Sat, Nov 17, 2007 at 12:29:59AM +0300, Anton Farygin wrote:
>> Люди добрые, поможите кто чем может... что делать с этим MemoryError.
>>
>> x86_64, hasher, branch-4.0
>>
>> Error while parsing 
>> "/usr/src/tmp/mythplugins-buildroot/usr/share/mythtv/mythvideo/scripts/fetch_poster.py"
>> Traceback (most recent call last):
>>    File "/usr/lib/rpm/python.req.py", line 133, in ?
>>      lis = 
>> parser.suite(open(src).read().replace("\r\n","\n")).tolist(line_info=1)
>> MemoryError
>> error: /bin/sh failed
>> error: Failed to find Requires
> 
> Workaround -- вручную добавить python-modules-encodings в BuildRequires.

Спасибо, сейчас сделаю!



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [devel] python encodings
  2007-11-16 21:29 [devel] help me! python.req! Anton Farygin
  2007-11-16 21:46 ` Anton Farygin
  2007-11-16 22:04 ` Alexey Tourbin
@ 2007-11-17  5:01 ` Alexey Tourbin
  2007-11-17  7:38   ` Anton Farygin
  2 siblings, 1 reply; 8+ messages in thread
From: Alexey Tourbin @ 2007-11-17  5:01 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 980 bytes --]

On Sat, Nov 17, 2007 at 12:29:59AM +0300, Anton Farygin wrote:
> Люди добрые, поможите кто чем может... что делать с этим MemoryError.
> 
> x86_64, hasher, branch-4.0
> 
> Error while parsing 
> "/usr/src/tmp/mythplugins-buildroot/usr/share/mythtv/mythvideo/scripts/fetch_poster.py"
> Traceback (most recent call last):
>    File "/usr/lib/rpm/python.req.py", line 133, in ?
>      lis = 
> parser.suite(open(src).read().replace("\r\n","\n")).tolist(line_info=1)
> MemoryError
> error: /bin/sh failed
> error: Failed to find Requires

http://google.com/codesearch?q=file%3afetch_poster.py

Там написано:
# -*- coding: utf8 -*-

это является нестандартным обозначением кодировки, лучше писать
# -*- coding: utf-8 -*-

тогда не потребуется разрешения алиаса через python-modules-encodings.

Думаю, захачить на эту тему python-base или нет.  То есть чтобы он
понимал побольше настандартных алиасов для стандартных кодировок,
без заглядывания в encodings.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [devel] python encodings
  2007-11-17  5:01 ` [devel] python encodings Alexey Tourbin
@ 2007-11-17  7:38   ` Anton Farygin
  2007-11-18  0:41     ` Alexey Tourbin
  0 siblings, 1 reply; 8+ messages in thread
From: Anton Farygin @ 2007-11-17  7:38 UTC (permalink / raw)
  To: ALT Devel discussion list

Alexey Tourbin пишет:
> On Sat, Nov 17, 2007 at 12:29:59AM +0300, Anton Farygin wrote:
>> Люди добрые, поможите кто чем может... что делать с этим MemoryError.
>>
>> x86_64, hasher, branch-4.0
>>
>> Error while parsing 
>> "/usr/src/tmp/mythplugins-buildroot/usr/share/mythtv/mythvideo/scripts/fetch_poster.py"
>> Traceback (most recent call last):
>>    File "/usr/lib/rpm/python.req.py", line 133, in ?
>>      lis = 
>> parser.suite(open(src).read().replace("\r\n","\n")).tolist(line_info=1)
>> MemoryError
>> error: /bin/sh failed
>> error: Failed to find Requires
> 
> http://google.com/codesearch?q=file%3afetch_poster.py
> 
> Там написано:
> # -*- coding: utf8 -*-
> 
> это является нестандартным обозначением кодировки, лучше писать
> # -*- coding: utf-8 -*-
> 
> тогда не потребуется разрешения алиаса через python-modules-encodings.

Мне кажется, что достаточно было бы вывести вменяемую диагностику. По 
крайней мере в моём случае.

> 
> Думаю, захачить на эту тему python-base или нет.  То есть чтобы он
> понимал побольше настандартных алиасов для стандартных кодировок,
> без заглядывания в encodings.

Если нестантартные алиасы являются стандартом де-факто (т.е. - 
значительно распространены), то видимо стоит хачить питон. В обратном 
случаае - выводить вменяемую диагностику и патчить приложения.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [devel] python encodings
  2007-11-17  7:38   ` Anton Farygin
@ 2007-11-18  0:41     ` Alexey Tourbin
  2007-11-18  1:52       ` Alexey Tourbin
  0 siblings, 1 reply; 8+ messages in thread
From: Alexey Tourbin @ 2007-11-18  0:41 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 4413 bytes --]

On Sat, Nov 17, 2007 at 10:38:27AM +0300, Anton Farygin wrote:
> Мне кажется, что достаточно было бы вывести вменяемую диагностику. По 
> крайней мере в моём случае.

Я сделал вменяемую диагностику, насколько это возможно.

$ hsh --init
..
rpm-build-python-0.32-alt1
...
$ hsh-shell
$$ cd
$$ echo '# coding: utf8' >test.py
$$ /usr/lib/rpm/python.req test.py
python.req: test.py: non-standard encoding: utf8
python2.4(encodings)
python.req: ERROR: test.py: 
python.req: maybe you need python-modules-encodings
Traceback (most recent call last):
  File "/usr/lib/rpm/python.req.py", line 178, in ?
    import encodings
ImportError: No module named encodings
$$ 

Вообще-то MemoryError в данном случае -- это питоновский баг
http://bugs.python.org/issue979739

> > Думаю, захачить на эту тему python-base или нет.  То есть чтобы он
> > понимал побольше настандартных алиасов для стандартных кодировок,
> > без заглядывания в encodings.
> 
> Если нестантартные алиасы являются стандартом де-факто (т.е. - 
> значительно распространены), то видимо стоит хачить питон. В обратном 
> случаае - выводить вменяемую диагностику и патчить приложения.

Посмотрим, насколько они распространены.

Parser/tokenizer.c:
   183  static char *
   184  get_normal_name(char *s)        /* for utf-8 and latin-1 */
   185  {
   186          char buf[13];
   187          int i;
   188          for (i = 0; i < 12; i++) {
   189                  int c = s[i];
   190                  if (c == '\0') break;
   191                  else if (c == '_') buf[i] = '-';
   192                  else buf[i] = tolower(c);
   193          }
   194          buf[i] = '\0';
   195          if (i > 3) { /* at least 4 characters */
   196                  const char *p = NULL;
   197                  switch (buf[0]) {
   198                  case 'u':
   199                          if (strncmp(buf, "utf-8", 5) == 0)
   200                                  p = buf + 5;
   201                          else if (strncmp(buf, "utf8", 4) == 0)
   202                                  p = buf + 4;
   203                          if (p && (*p == '\0' || *p == '-'))
   204                                  return "utf-8";
   205                          break;
   206                  case 'i':
   207                          if (strncmp(buf, "utf-8") == 0)
   208                                  p = buf + 5;
   209  
   210  
   211  
   212          if (strcmp(buf, "utf-8") == 0 ||
   213              strncmp(buf, "utf-8-", 6) == 0) return "utf-8";
   214          else if (strcmp(buf, "latin-1") == 0 ||
   215                   strcmp(buf, "iso-8859-1") == 0 ||
   216                   strcmp(buf, "iso-latin-1") == 0 ||
   217                   strncmp(buf, "latin-1-", 8) == 0 ||
   218                   strncmp(buf, "iso-8859-1-", 11) == 0 ||
   219                   strncmp(buf, "iso-latin-1-", 12) == 0) return "iso-8859-1";
   220          else return s;gg
   221  }

То есть у питона есть две стандартные кодировки, для которых почти
ничего не нужно -- utf-8 и iso-8859-1.  Но в модуле encodings
определяются дополнительные алиасы, в том числе для стандартных
кодировок.

Lib/encodings/aliases.py:
   395      # latin_1 codec
   396      '8859'               : 'latin_1',
   397      'cp819'              : 'latin_1',
   398      'csisolatin1'        : 'latin_1',
   399      'ibm819'             : 'latin_1',
   400      'iso8859'            : 'latin_1',
   401      'iso_8859_1'         : 'latin_1',
   402      'iso_8859_1_1987'    : 'latin_1',
   403      'iso_ir_100'         : 'latin_1',
   404      'l1'                 : 'latin_1',
   405      'latin'              : 'latin_1',
   406      'latin1'             : 'latin_1',
...
   486      # utf_8 codec
   487      'u8'                 : 'utf_8',
   488      'utf'                : 'utf_8',
   489      'utf8'               : 'utf_8',
   490      'utf8_ucs2'          : 'utf_8',
   491      'utf8_ucs4'          : 'utf_8',

Есть искушение внести некоторые из этих алисов в Parser/tokenizer.c,
чтобы уменьшить число падений при отсутствии encodings/aliases.py.
Посмотрим, что будет по результатам пересборки с новым rpm-build-python.
Потому что теперь в python.req.py будет диагностика "non-standard encoding:",
которая мимикрирует проверку в Parser/tokenizer.c.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [devel] python encodings
  2007-11-18  0:41     ` Alexey Tourbin
@ 2007-11-18  1:52       ` Alexey Tourbin
  0 siblings, 0 replies; 8+ messages in thread
From: Alexey Tourbin @ 2007-11-18  1:52 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 4071 bytes --]

On Sun, Nov 18, 2007 at 03:41:13AM +0300, Alexey Tourbin wrote:
> $ hsh-shell
> $$ cd
> $$ echo '# coding: utf8' >test.py
> $$ /usr/lib/rpm/python.req test.py
> python.req: test.py: non-standard encoding: utf8
> python2.4(encodings)
> python.req: ERROR: test.py: 
> python.req: maybe you need python-modules-encodings
> Traceback (most recent call last):
>   File "/usr/lib/rpm/python.req.py", line 178, in ?
>     import encodings
> ImportError: No module named encodings
> $$ 
> 
> Вообще-то MemoryError в данном случае -- это питоновский баг
> http://bugs.python.org/issue979739

Здесь на самом деле нету MemoryError, потому что здесь есть ошибочка
в повторном выбросе исключения.  Я только что это починил и заодно
сделал более точное определение модуля кодировки, хотя это вряд ли
реально где-нибудь потребуется.  Впрочем, посмотрим.


commit 683c7b2a82e80aeacf1ca1dcc7bc76470f58483a
Author: Alexey Tourbin <at@altlinux>
Date:   Sun Nov 18 04:45:01 2007 +0300

    python.req.py: implemented search for particular encodings module
    
    $ cat test2.py
    # coding: cp1251
    $ ./rpm-build-python/python.req.py test2.py
    python.req: test2.py: non-standard encoding: cp1251
    python.req: test2.py: encoding=cp1251 module=encodings.cp1251
    python2.4(encodings.cp1251)
    $

diff --git a/rpm-build-python/python.req.py b/rpm-build-python/python.req.py
index 53b3886..52b7e0c 100755
--- a/rpm-build-python/python.req.py
+++ b/rpm-build-python/python.req.py
@@ -150,33 +150,46 @@ else :
                     return 'iso-8859-1'
             return enc
 
-        def need_encoding(line):
+        missing_encodings = None
+        def get_encoding_module(enc) :
+            mod = 'encodings'
+            try :
+                from encodings import search_function
+            except :
+                missing_encodings = True
+                return mod
+            try :
+                mod = search_function(enc)[1].im_class.__module__
+                print >> sys.stderr, "python.req: %s: encoding=%s module=%s" % (src,enc,mod)
+            except :
+                pass
+            return mod
+
+        def need_encoding_module(line):
             enc = get_raw_encoding(line)
             if enc :
                 enc = get_enc_normal_name(enc)
                 if enc not in ['utf-8','iso-8859-1'] :
                     print >>sys.stderr, "python.req: %s: non-standard encoding: %s" % (src,enc)
-                    return enc
+                    mod = get_encoding_module(enc)
+                    return mod
 
         for src in files :
             ext = os.path.splitext(basename(src))[1]
             if ext not in ['.so','.pyc','.pyo','.pth'] :
                 lines = [ line.rstrip().replace('\r','') for line in open(src).readlines() ]
-                enc = None
+                encmod = None
                 if len(lines) > 0 :
-                    enc = need_encoding(lines[0])
-                if not enc and len(lines) > 1 :
-                    enc = need_encoding(lines[1])
-                if enc :
-                    print "%s(%s)" % (prefix,'encodings')
+                    encmod = need_encoding_module(lines[0])
+                if not encmod and len(lines) > 1 :
+                    encmod = need_encoding_module(lines[1])
+                if encmod :
+                    print "%s(%s)" % (prefix,encmod)
                 try :
                     lis = parser.suite('\n'.join(lines)+'\n').tolist(line_info=1)
                 except StandardError,msg :
                     print >> sys.stderr, 'python.req: ERROR: %s: %s' % (src,msg)
-                    if enc :
-                        try :
-                            import encodings
-                        except :
+                    if encmod and missing_encodings :
                             print >> sys.stderr, "python.req: maybe you need python-modules-encodings"
                     raise
                 for item in match(lis) :

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-11-18  1:52 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-16 21:29 [devel] help me! python.req! Anton Farygin
2007-11-16 21:46 ` Anton Farygin
2007-11-16 22:04 ` Alexey Tourbin
2007-11-16 22:04   ` Anton Farygin
2007-11-17  5:01 ` [devel] python encodings Alexey Tourbin
2007-11-17  7:38   ` Anton Farygin
2007-11-18  0:41     ` Alexey Tourbin
2007-11-18  1:52       ` Alexey Tourbin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git