2017-01-07 14 views
5

У меня была проблема, когда python не находил модули, установленные на пипе, в то время как в virtualenv.

Я сузил его, и обнаружил, что когда я звоню python, когда мой virtualenv активирован, он по-прежнему достигает /usr/bin/python вместо /home/liam/dev/.virtualenvs/noots/bin/python.

Когда я использую which python в virtualenv я получаю:

/home/liam/dev/.virtualenvs/noots/bin/python

Когда я смотрю на свою $PATH переменную в virtualenv я получаю:

bash: /home/liam/dev/.virtualenvs/noots/bin:/home/liam/bin:/home/liam/.local/bin:/home/liam/bin:/home/liam/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory

и все же, когда я на самом деле пробег python - до /usr/bin/python

Чтобы сделать вещи более запутанными для меня, если я запустил python3.5, он захватывает python3.5 из правильного каталога (т. /home/liam/dev/.virtualenvs/noots/bin/python3.5)

Я так и не коснулся /home/liam/dev/.virtualenvs/noots/bin/. python и python3.5 все еще оба связаны с python3 в этом каталоге. Перемещение до /home/liam/dev/.virtualenvs/noots/bin/ и бег ./python, ./python3 или ./python3.5 все работает нормально.

Я использую virtualenvwrapper, если это имеет значение, однако проблема, казалось, происходит в последнее время, вскоре после установки virtualenv и virtualenvwrapper

+4

Запустите 'alias' в командной строке, чтобы узнать, был ли псевдоним' python'. – tdelaney

+0

AH спасибо! это была проблема. – liamhawkins

+1

Пожалуйста, разместите решение, так как это интересное Q. – oliversm

ответ

1

Если вы не получили программу, которую which говорит, что вы должны ее получить, вам нужно посмотреть вверх по цепочке, чем исполнитель платформы. Обычно у оболочек есть способ для псевдонимов, и на большинстве оболочек unixy вы можете просто ввести alias, чтобы увидеть, какие команды были переназначены. Тогда это просто вопрос перехода к файлам конфигурации для вашей оболочки и удалению псевдонима.

Иногда люди псевдоним python, чтобы попытаться разобраться, какой питон они должны использовать. Но обычно есть и другие, лучшие способы. Например, на моей машине linux python3 находится в пути, но является символической ссылкой на реальный питон, который я использую.

[email protected] ~ $ which python3 
/usr/bin/python3 
[email protected] ~ $ ls -l /usr/bin/python3 
lrwxrwxrwx 1 root root 9 Feb 17 2016 /usr/bin/python3 -> python3.4 
[email protected] ~ $ 

Это хорошо, потому что программы без оболочки, на которых запущен python, получают то же, что и я, и виртуальные среды работают естественным образом.

3

Как tdelaney предложил в комментариях, я побежал alias и обнаружил, что я ранее псевдонимами python до /usr/bin/python3.5 в моем .bashrc.

Я удалил этот псевдоним из моего .bashrc, побежал unalias python и source ~/.bashrc, и проблема была решена.