Как разрешить «ImportError» в Python?

Да, -Iработает только с одним аргументом за раз. С -Iввод также разбирается на аргументы иначе, чем без (с использованием -nили без ).

С помощью -I{}вы получаете слово для каждой не -пустой строки (, за исключением того, что по-прежнему можно вставлять новую строку, заключая ее в кавычки с обратной косой чертой ), с начальными, но не конечными пробелами (список которых зависит от реализации и локали для некоторых удаленных ). Котировки (", 'и \по-прежнему обрабатываются, но не так, как shхотя ).

Без -I{}слова являются пробелами (, по крайней мере, с разделителями SPC, TAB и NL )и обрабатываются кавычки.

Сравните:

$ printf ' a "b c" \n' | xargs -n1 printf '<%s>\n'
<a>
<b c>
$ printf ' a "b c" \n' | xargs -I{} printf '<%s>\n' {}
<a b c >

IMO, xargs— это немного беспорядок, единственные надежные/полезные способы его использования — с расширениями -0и -dGNU.

Если вы хотите запустить команду с более чем одним аргументом за раз и использовать разные держатели места -для каждого, лучше всего использоватьsh:

xargs < filelist -r -n2 sh -c 'printf "1: %s\n2: %s\n" "$1" "$2"' sh

Здесь xargsпередает 2 аргумента за раз в sh, а shзанимает место, занимаемое "$1"и"$2"(см. также "$@"для передачи всех аргументов сразу ).

Это при токенизации слов по умолчанию xargs. Если filelistдолжен содержать один файл в строке, вы должны использовать -d '\n'GNU xargs.

Для вашего примера grepвам не нужны ни -n, ни -I, просто:

xargs < filelist grep mystring

Затем xargsпередаст как можно больше аргументов вgrep(аргументы добавляются в конце ). Мы можем обойтись без -rздесь (расширения GNU )как будто filelistвсе пустое, все еще работающее grepбез файловых аргументов (которое -rпредотвращает )должно быть безвредным, поскольку оно будет искать mystring в конце filelist.

Однако вы можете использовать параметр -HGNU grepили запустить его как:

xargs < filelist grep mystring /dev/null

, чтобы убедиться, что grepвсегда печатает имя файла, когда находит совпадение, даже если filelistсодержит только одно слово.

0
03.04.2021, 16:05
1 ответ

Чтобы Python нашел установленный пакет (в )системе -, сделайте следующее:

В каталоге /usr/local/lib/python2.7/site-packagesсоздайте файл с именемdistpackages.pth(или любой другой файл с расширением .pth; Я выбираю очевидное имя, избегая при этом дефиса ).

Внутри этого файла создайте одну строку:

../dist-packages

Вот именно. Эта строка относится к каталогу /usr/local/lib/python2.7/dist-packages, который pipнастроен для установки вещей. Python прочитает этот файл и добавит в него строку (s )к sys.path, а затем узнает, где найти установленный пакет (s ).

Объяснение этому приведено в документации сайта Python . И этот ответ по сути является копией этого ответа на Superuser .


Я не знаю, почему и как pipнастроен на установку вещей в другое место, чем обычно. Это Ubuntu (или Debian ), которые я видел раньше, но довольно странно видеть их только для pip, а не для python. Кроме того, я бы не ожидал этого для чего-то, что было установлено в /usr/local, которые в основном являются (более поздними )пользовательскими установками.

0
28.04.2021, 22:54

Теги

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