Другая версия Python не может найти модули

предпочтенная острота, не намереваясь записать целый автономный сценарий только для этого

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

Для мелочи как это я обычно начинаю пытаться решить его в Bash:

#!/bin/bash
if [ -z "$1" ] ; then echo Need arguments. ; exit 1 ; fi

typeset -i i=1
for f in "$*"
do
    tailbits=`echo "$f" | sed -e 's/^[0-9]+//'`
    mv "$f" sertmp-`printf %02d $i`"$tailbits"
    i=i+1
done

for f in "sertmp-*"
do
    mv "$f" `echo "$f" | sed -e s/^sertmp-//` 
done

В основном этот сценарий снимает изоляцию с любых ведущих цифр, затем помещает дополненное нулем порядковое число увеличения на переднюю сторону с файлами, пронумерованными согласно порядку, Вы передаете их сценарию.

Это делает это на двух этапах, с sertmp- префиксы для первичной обработки для предотвращения любого риска коллизий имени. Если Вы называете этот сценарий mp3-renamer и назовите его как:

$ mp3-renamer 01-foo.mp3 03-bar.mp3 04-qux.mp3

Вы сталкиваетесь с тривиальной коллизией на первом, переименовывают, если Вы не используете 2 передачи, чтобы сделать переименование. (01-foo.mp3 -> 01-foo.mp3.)

Если Вы называете его как это, хотя:

$ mp3-renamer 02-foo.mp3 01-foo.mp3

Вы случайно стираетесь 01-foo.mp3 в первом переименовывают с 1 передачей, переименовывают.

Если бы проблема становится более сложной, я переписал бы ее в Perl. В той точке Вы могли затем использовать хеш, чтобы содержать старое-> новое отображение имени и использовать немного умного кода для разработки надлежащего порядка сделать переименования для предотвращения потребности в 2 передачах.

1
23.06.2014, 00:22
1 ответ

Казалось бы, что существует bz2module.c, который идет с источником Python 2.4, но, кажется, не компилируется по умолчанию и нет ничего в Модулях/Установке для него. Вероятно, потому что пакет разработки для bz2 не установлен по умолчанию. Попытайтесь найти bzlib.h файл в своей системе:

$ find /usr/include -name bzlib.h

Если это не существует, то установите соответствующий пакет библиотеки (libbz2-dev на Debian/Ubuntu).

После той попытки, добавляющей следующее к Modules/Setup.local и затем перекомпилировавшей python 2.4.

bz2 bz2module.c
1
27.01.2020, 23:53
  • 1
    Попробованный, что, но получил ошибки во время make :libpython2.4.a(bz2module.o): In function 'BZ2Decomp_decompress': /home/incoming/Python-2.4.2/./Modules/bz2module.c:1841: undefined reference to 'BZ2_bzDecompress' какая-либо идея? –  ftkg 16.10.2013, 18:20
  • 2
    , который Она не приводит к сбою на моей стороне, таким образом, я не уверен, где проблема могла быть. Так как сборка находит bzlib.h, наиболее вероятная причина состоит в том, что существует несоответствие версии между тем, что Вы установили для bzip2 пакета разработки и что ожидается в Python. Версия libbz2-dev в моей системе 1.0.6-1, что было установлено в Вашей системе? –  Arcege 17.10.2013, 16:45
  • 3
    Просто выбрал альтернативу путь. Но Вы, вероятно, корректны, отметит Ваш ответ. –  ftkg 25.10.2013, 22:19

Теги

Похожие вопросы