2014-08-27 2 views
6

Я хочу работать с ртутным хранилищем hg. То есть я клонировал Mercurial от https://www.mercurial-scm.org/repo/hg и хочу запустить некоторые команды hg внутри клонированного репозитория. Проблема заключается в том, что при запуске hg в этом клоне hg исполняемый файл пытается загрузить свои модули python из этого каталога, а не из /usr/lib/pythonVERSION и т. Д. Как я понимаю, это происходит потому, что путь импорта Python sys.path содержит пустую строку в качестве первой записи, которая, вероятно, означает «текущий каталог». PYTHONPATH переменная среды не задана.Как удалить текущий каталог из пути импорта python

Квест, как я могу предотвратить установку hg из «неправильных» модулей.

+0

'sys.path.insert (0,"/usr/lib/pythonVERSION ")'? –

+0

Куда я должен положить его? Я не хочу изменять скрипт 'hg' системы. – ragol

ответ

0

@ragol, я думаю, что Padraic имеет правильное решение. В скрипте python, который вы пытаетесь запустить hg-команды, вам необходимо включить следующую команду: sys.path.insert(0,"/usr/lib/pythonVERSION")

Поместите команду в самом начале вашего скрипта python. Команда сообщает python, чтобы сначала искать в каталоге /usr/lib/pythonVERSION при импорте модулей.

Если это не сработает, вам может потребоваться более конкретный путь. Например, если модуль, который вы пытаетесь импортировать находится в директории /usr/lib/pythonVERSION/site-packages/hg, вы можете использовать следующую команду: sys.path.insert(0,"/usr/lib/pythonVERSION/site-packages/hg")

+1

Скрипт, который я пытаюсь запустить, это '/ usr/bin/hg', который является самым меркуриальным. Возможно, я не понимаю вас правильно, но кажется, что вы предлагаете изменить его. Это, конечно, самое простое решение, но это будет означать, что я бы изменил файл, установленный диспетчером пакетов. Мне не нравится эта идея. Я бы предпочел написать внешний скрипт, который вызывает '/ usr/bin/hg' таким образом, чтобы он не загружал модули из текущего каталога. – ragol

+0

Какое имя скрипта вы используете? есть ли расширение .py? im, предполагая, что вы либо создали, либо отредактировали некоторый скрипт python и пытаетесь импортировать модуль под названием mercurial. что я предлагаю включить в команду sys.path.insert перед строкой, в которой вы пытаетесь импортировать меркурийный модуль – rolb

+1

@rolb, сколько раз он должен вам сказать? Он запускает '/ usr/bin/hg' в качестве исполняемого файла. Это может быть реальный исполняемый файл, это может быть скрипт с shebang. У него нет расширения, они не требуются в UNIX. –

1

Путь я бы справиться с этой темой является создание /usr/local/bin/hg ш скрипт со следующим содержимым:

#!/bin/sh 
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg 

(Ubuntu на основе дистрибутивы используют dist-packages вместо site-packages)

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

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

Смежные вопросы