Создание виртуальной среды Python с помощью команды python3 -m venv venv указывает на неправильный каталог пакетов сайта

ОС = 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 будет постоянным.

Возможно, было бы полезно, если бы вы добавили точную последовательность шагов, которые вы использовали для: 1. создания venv; 2. активировать вент; 3. установить пакеты внутри venv. Кроме того, что вы подразумеваете под «я что-то обновил в своей установке системы python 3.10.6»?

navneethc 11.02.2023 19:16

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

E Cheadle 11.02.2023 19:44

Я что-то обновил, значит, я думаю, что запустил apt-get install для чего-то, связанного с python, или когда я запускал обновления своего программного обеспечения, я знаю, что библиотеки python были обновлены, но я не обращал внимания, потому что python работает безупречно, и это было обычное обновление.

E Cheadle 11.02.2023 20:01
dist-packages используется системами на основе Debian для установки зависимостей для приложений ОС, для которых требуется Python. Можете ли вы найти testenv/venv/lib/python3.10/site-packages на своем рабочем месте?
navneethc 11.02.2023 23:16

Да, у меня есть каталог 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, я не понимаю.

E Cheadle 11.02.2023 23:30

Проблема в том, что когда я запускаю команду 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 установить правильный путь.

E Cheadle 11.02.2023 23:47

Поскольку этой проблеме уже более 14 лет, а я слишком новичок в python, чтобы эффективно решать языковые проблемы, я просто добавлю экспорт PYTHONPATH=$PYTHONPATH:'/home/echeadle/testenv3/venv/lib/ pyt‌​hon3.10/site-package‌​s’ в мой код, пока я не разберусь с этим.

E Cheadle 12.02.2023 20:44

Если вы добавите экспортную переменную PYTHONPATH до создания venv, исправление будет постоянным. Вы должны не забыть изменить полный путь к новой папке, которую вы создаете. В моем случае я создал папку testenv4, и перед тем, как запустить python -m venv venv, я сделал экспорт PYTHONPATH='/home/echeadle/testenv4/venv/lib/python3.10/site‌​-packages'. Я понял, что PYTHONPATH был не установлен, поэтому вместо использования PYTHONPATH=$PYTHONPATH я позаботился о том, чтобы не добавлять неправильные пути в sys.path.

E Cheadle 12.02.2023 21:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел ответ на проблему, которую я представил, когда python -m venv возвращает неверный путь к каталогу сайтов-пакетов виртуальной среды на веб-сайте jetbrains.

Проблема была в том, что в моих .bash_aliases у меня был псевдоним python="/usr/bin/python3" В этом была проблема. Объяснение находится по ссылке ниже.

Исправлен неверный путь к сайтам-пакетам

Другие вопросы по теме

Как преобразовать тип данных массива строк в тип данных массива с плавающей запятой?
У меня есть класс луча и класс линии, и я хочу найти точку пересечения линии и луча
Использование регулярного выражения в python для возврата строки, а некоторые строки пропускаются
Замените все вхождения слова другим конкретным словом, которое должно стоять где-то в предложении перед этим словом
Невозможно напечатать диапазон результатов с пробелом между каждыми тремя результатами
Как мне добавить tqdm или аналогичный индикатор выполнения в этот многопроцессорный скрипт?
Есть ли способ создать несколько вложенных списков на определенную глубину?
Tkinter- Как остановить цикл, который находится в другом файле, с помощью кнопки остановки?
Как узнать, закрыл ли пользователь окно tkinter?
Объединить два отсортированных массива с использованием цикла for, в котором отсутствует последний элемент