Как я могу решить "не могу импортировать имя 'main' из 'virtualenv'"? - PullRequest
0 голосов
/ 04 мая 2020

Когда я пытаюсь запустить virtualenv, я получаю следующую ошибку:

[jelly@laptop Getskilled]$ virtualenv venv
Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 6, in <module>
    from virtualenv import main
ImportError: cannot import name 'main' from 'virtualenv' (/home/jelly/.local/lib/python3.8/site-packages/virtualenv/__init__.py)

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

Ближайший пост, который я смог найти, был такой: virtualenv: невозможно импортировать имя 'main'

Я пытался подписаться на этот пост, так В интерпретаторе python я запустил следующее:

import virtualenv
virtualenv.__file__

, который вернул: '/home/jelly/.local/lib/python3.8/site-packages/virtualenv/init .py '

Однако файла /usr/local/bin/virtualenv.py не было, и в каталоге .local нет virtualenv.py, так что решение в этом посте не будет работать для меня.

Что я могу попробовать дальше?

Обновление: я нашел файл virtualenv.py в / usr / bin /, и кажется, что он вызывает проблему, но я не уверен, как обновить его для работы с текущей версией. Я переместил его, затем попытался переустановить virtualenv, но это не сгенерировало новый virtualenv.py, так что я до сих пор не уверен, что происходит.

Ответы [ 3 ]

0 голосов
/ 04 мая 2020

Ошибка может быть исправлена ​​путем изменения файла пипса

Проверьте местоположение файла:

$ which pip
path -> /usr/bin/pip

Go в этом месте / usr / bin / pip и откройте терминал.

Введите: $ sudo nano pip

Вы можете увидеть:

from pip import main
if __name__ == '__main__':
     sys.exit(main())

Изменить на:

import sys
from pip import __main__
if __name__ == '__main__':
     sys.exit(__main__._main())

затем Ctrl + O написать изменения и выход.

Надеюсь, это подойдет !!

0 голосов
/ 12 мая 2020

Это случилось со мной, когда я установил новую Ubuntu 20.04 LTS. Я переименовал существующий файл virtualenv в другое, и он снова начал работать. Не совсем уверен, почему, но это был совет из этого ответа: { ссылка }

sudo mv /usr/local/bin/virtualenv /usr/local/bin/xvirtualenv

0 голосов
/ 04 мая 2020

Я добавил символьную c ссылку / usr / bin / virtualenv, указывающую на /home/jelly/.local/bin/virtualenv, и теперь, похоже, она работает:)

...