2016-02-25 11 views
1

Когда я загружал определенные модули [а именно pygments.lexers Bash Lexer и pygments.formatters LatexFormatter] Я получал сообщение об ошибке, что python не смог найти модули. Затем я понял, что эта проблема вызвана моей PYTHONPATH, которая настроена для использования paraview с python. Он приносит свою версию pygments, которая по какой-то причине не работает с nbconvert из jupyter notebook [Обратите внимание, что это не полностью дисфункциональный, так как PythonLexer и несколько других вызывались без проблем, это были только те, что я упомянутое выше, которое невозможно найти].изменить приоритет pythonpath

У меня есть аналогичная проблема с майави, которая не будет работать с версией vtk в paraview.

Обе эти проблемы можно решить достаточно просто, прокомментировав путь python в bashrc, но очевидно, что paraview не будет работать.

Можно ли, например, уменьшить приоритет PYTHONPATH, чтобы системные коды в/etc ... назывались предпочтительнее, но paraview все еще может найти те, которые ему нужны в PYTHONPATH?

Я использую питон 2,76 на Linux Mint 17.3, ParaView является версией 4.4.0, установленный из исходного кода в соответствии с here

ответ

0

Да, вы можете import sys и манипулировать sys.path как обычный список во время выполнения. Вы можете изменить то, что там, или просто вставить в начале (sys.path.insert(0, 'path')). Сделайте это перед заявлением import. Если это вызовет проблемы в другом месте, верните его после инструкции import.

Обратите внимание, что это довольно хакеры. Но похоже, что у вас может быть дело, хотя я не рассматривал эти конкретные инструменты вместе.

Редактировать: это более актуально, если вы хотите управлять путём python на уровне индивидуальных импортах в течение одного выполнения python. Если вы хотите, чтобы контролировать путь на уровне одного полного выполнения Python, вы можете также установить путь питона в командной строке только для этого исполнения, как это:

PYTHONPATH=/replacement/path/here python your_script.py 

Это более многословным (если вы не завернуть это в сценарии оболочки или псевдониме), чем просто вызов python, но он позволяет вам управлять одним сценарием по одному за раз, добавив его в .bashrc/.bash_profile или аналогичные изменения для всего сеанса оболочки.

+0

Это, похоже, не работает, оно просто добавляет «путь» к началу sys.path, когда я импортирую те же функции - например, pygments.lexers - он все еще вызывает те из python path –

+0

«Путь» представляет путь файловой системы, который вы хотите вставить. –

+0

Правильно, это имеет смысл. Это отлично работает для вызова функций в коде, однако оно все равно не будет работать для вызова функций из командной строки. Я попробовал называть его вставлять его в свой pythonrc, но все же я получаю те же ошибки, что и вызовы приложений из командной строки –

0

export PYTHONPATH=$PYTHONPATH:<your_path> будет уделять приоритетное внимание системным путям, и только если что-то не будет видно на вашем пути.

export PYTHONPATH=<your_path>:$PYTHONPATH будет искать <your_path> сначала, а затем $ PYTHONPATH для того, чего он не найдет.

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

+0

Я попытался реализовать это, но он, похоже, не работает. Python все еще читает $ PYTHONPATH во-первых, любые предложения? –

+0

Вы запускаете программы с терминала? Причина, если вы этого не сделаете, и вы запускаете их из своих пусковых установок, тогда «PYTHONPATH» не установлен. Также каков вывод (выполняется в терминале) 'echo $ PYTHONPATH $? –

+0

запуск с терминала, echo $ PYTHONPATH возвращает: /home/sean/OpenFOAM/ThirdParty-3.0.x/platforms/linux64Gcc/ParaView-4.4.0/lib/paraview-4.4/site-packages:/home/sean/OpenFOAM /ThirdParty-3.0.x/platforms/linux64Gcc/ParaView-4.4.0/lib/paraview-4.4/site-packages/vtk –

0

Порядок внесения записей в PYTHONPATH частично прав, но системные дорожки, похоже, не включаются , пока вы не запустите python, а затем их поместите в конец. Таким образом, чтобы поставить системный путь впереди, явно добавить:

export PYTHONPATH="[path/to/system/files]:$PYTHONPATH" 

Это своего рода хак, потому что система путь добавления будет дублироваться в sys.path.Но это работает.