PYTHONPATH - динамический для разных установок Python? - PullRequest
2 голосов
/ 03 октября 2011

На моем сервере CentOS5 у меня есть и Python2.4, и 2.6 (для работы yum требуется 2.4). Я не уверен, что произошло, но внезапно система становится очень запутанной каждый раз, когда я пытаюсь запустить файл, модули которого загружены в каталог 2.4 site-packages. Я проверил PYTHONPATH / sys.path и, похоже, все было перезаписано данными среды 2.6.

Это раньше не делалось. Я просто объявил / usr / bin / python или / usr / bin / python26 в инструкции shebang в начале скрипта, и он всегда находил правильные модули просто отлично.

Есть ли способ, чтобы переменная PYTHONPATH была динамической и загружала разные пути в зависимости от того, какой интерпретатор Python запущен?

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

Это началось после установки web.py (который мне, кстати, нравится).

Traceback: Как кто-то прокомментировал ниже, я изменил shebang на #! / Usr / bin / env python для этой программы:

Traceback (most recent call last):
  File "/usr/bin/linkchecker", line 24, in ?
    import codecs
  File "/usr/lib/python2.6/codecs.py", line 268
    return (b"", 0)
              ^

Другой пример, пытающийся использовать yum:

Traceback (most recent call last):
  File "/usr/bin/yum", line 5, in ?
    import yum
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 21, in ?
    import os
  File "/usr/lib/python2.6/os.py", line 758
    bs = b""
           ^

Я заметил пару программ, не смущенных синтаксисом b "", и все они - программы, предназначенные для использования 2.4, которые по какой-то причине используют 2.6. Если я попытаюсь заставить программу использовать интерпретатор 2.6, он сможет понять этот синтаксис, но затем не сможет найти другие модули (которые находятся в каталоге 2.4 site-packages).

Я не знаю, что это за синтаксис, так как они были записаны в модули, которые я получил от sourceforge, однако они работали на прошлой неделе. Я не уверен, что изменилось.

Спасибо, Том

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Прежде всего, используйте virtualenv для изоляции пакетов для нескольких установок Python. Большинство ваших проблем исчезнет немедленно.

Во-вторых, как Ibp рекомендовал в своем ответе, измените строку shebang, чтобы использовать «текущий активный» двоичный файл python, чтобы он работал с несколькими интерпретаторами.

1 голос
/ 03 октября 2011

Вместо использования шебанга (первые байты файла)

#!/usr/bin/python

используйте шебанг

#!/usr/bin/env python

Редактировать: Я второе предложение Нуфала использовать virtualenv.

...