ОС = Pop_OS 22.04 Версия Python 3.10.6 У меня возникают проблемы с путем к виртуальной среде, когда я использую команду python -m venv. Это команды, которые я использую для проверки проблемы:
cd
mkdir testenv
cd testenv
python3 -m venv venv
source venv/bin/activate
pip install django
django-admin startproject website .
python manage.py runserver
Я намеренно сделал это простым, и на виртуальной машине он работает, на моей рабочей станции выдает ошибку.
На моей рабочей станции после создания виртуальной среды я использую pip для установки django и запуска стартового проекта. Это работало много раз. После того, как я что-то обновил в своей установке системы python 3.10.6, django и другие установленные пакеты pip не могут быть импортированы.
Поэтому я установил виртуальную версию своей поп-системы и выполнил ту же последовательность шагов. Django на виртуальной машине работал так же, как и на моей рабочей станции.
Поискав в Интернете и переполнив стек, я получил совет не перемещать созданный файл venv. Я не перемещал папку проекта, над которой работал, но все же создал папку testenv и создал виртуальную среду на своей рабочей станции. Джанго так и не запустился.
Вот ошибка
Traceback (most recent call last):
File "/home/echeadle/testenv/manage.py", line 11, in main
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/echeadle/testenv/manage.py", line 22, in <module>
main()
File "/home/echeadle/testenv/manage.py", line 13, in main
raise ImportError(
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
Единственная разница, которую я вижу, это когда я запускаю сайт python -m. Это моя рабочая станция, которая выходит из строя:
sys.path = [
'/home/echeadle/testenv',
'/usr/lib/python310.zip',
'/usr/lib/python3.10',
'/usr/lib/python3.10/lib-dynload',
'/usr/local/lib/python3.10/dist-packages',
'/usr/lib/python3/dist-packages',
]
USER_BASE: '/home/echeadle/.local' (exists)
USER_SITE: '/home/echeadle/.local/lib/python3.10/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
Это результат той же команды (python -m site) в работающей системе:
sys.path = [
'/home/echeadle/testenv',
'/usr/lib/python310.zip',
'/usr/lib/python3.10',
'/usr/lib/python3.10/lib-dynload',
'/home/echeadle/testenv/venv/lib/python3.10/site-packages',
]
USER_BASE: '/home/echeadle/.local' (exists)
USER_SITE: '/home/echeadle/.local/lib/python3.10/site-packages' (doesn't exist)
ENABLE_USER_SITE: False
На своей рабочей станции я запустил оболочку, импортировал сайт и осмотрелся, но не могу найти информацию о том, как команда python -m venv использует функцию сайта. Все, что я знаю, это то, что на моей рабочей станции это единственное, что я нашел, что может быть проблемой.
См. комментарии ниже, но временное исправление:
cd
mkdir testenv
cd testenv
export PYTHONPATH='home/echeadle/testenv/venv/lib/python3.10/site-packages'
python3 -m venv venv
source venv/bin/activate
pip install django
django-admin startproject website .
python manage.py runserver
Если вы экспортируете PYTHONPATH перед созданием виртуальной среды, исправление для жизни venv будет постоянным.
Я думал, что это очевидно из абзацев о том, что я пробовал. Но это первый вопрос, который я задал, поэтому я не удивлен вашим комментарием. Я вернусь и добавлю информацию.
Я что-то обновил, значит, я думаю, что запустил apt-get install для чего-то, связанного с python, или когда я запускал обновления своего программного обеспечения, я знаю, что библиотеки python были обновлены, но я не обращал внимания, потому что python работает безупречно, и это было обычное обновление.
dist-packages
используется системами на основе Debian для установки зависимостей для приложений ОС, для которых требуется Python. Можете ли вы найти testenv/venv/lib/python3.10/site-packages
на своем рабочем месте?
Да, у меня есть каталог testenv/lib/python3.10/site-packages. В site-packages есть каталог django и каталог Django-4.1.6.dist-info. Я могу запустить исполняемый файл django-admin startproject после получения виртуальной среды, но когда я запускаю manage.py runserver, он не может найти django. Почему путь к каталогу site-packages не отображается, когда я запускаю python -m site, я не понимаю.
Проблема в том, что когда я запускаю команду python -m venv venv, пути устанавливаются неправильно. В качестве хака я создал файл site-packages.pth в каталоге '/usr/local/lib/python3.10/dist-packages' и ввел полный путь ('/home/echeadle/testenv/venv/lib/python3. 10/site-packages') туда, где pip установил django и все работает. Итак, что-то мешает команде python -m venv установить правильный путь.
Поскольку этой проблеме уже более 14 лет, а я слишком новичок в python, чтобы эффективно решать языковые проблемы, я просто добавлю экспорт PYTHONPATH=$PYTHONPATH:'/home/echeadle/testenv3/venv/lib/ python3.10/site-packages’ в мой код, пока я не разберусь с этим.
Если вы добавите экспортную переменную PYTHONPATH до создания venv, исправление будет постоянным. Вы должны не забыть изменить полный путь к новой папке, которую вы создаете. В моем случае я создал папку testenv4, и перед тем, как запустить python -m venv venv, я сделал экспорт PYTHONPATH='/home/echeadle/testenv4/venv/lib/python3.10/site-packages'. Я понял, что PYTHONPATH был не установлен, поэтому вместо использования PYTHONPATH=$PYTHONPATH я позаботился о том, чтобы не добавлять неправильные пути в sys.path.
Я нашел ответ на проблему, которую я представил, когда python -m venv возвращает неверный путь к каталогу сайтов-пакетов виртуальной среды на веб-сайте jetbrains.
Проблема была в том, что в моих .bash_aliases у меня был псевдоним python="/usr/bin/python3" В этом была проблема. Объяснение находится по ссылке ниже.
Исправлен неверный путь к сайтам-пакетам
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Возможно, было бы полезно, если бы вы добавили точную последовательность шагов, которые вы использовали для: 1. создания venv; 2. активировать вент; 3. установить пакеты внутри venv. Кроме того, что вы подразумеваете под «я что-то обновил в своей установке системы python 3.10.6»?