Внезапно ImportError: Не удалось импортировать Django. Вы уверены, что он установлен и доступен в вашей переменной окружения PYTHONPATH?

Внезапно мой проект Django показал мне следующую ImportError: "ImportError: Не удалось импортировать Django. Вы уверены, что он установлен и доступен в вашей переменной окружения PYTHONPATH? Вы забыли активировать виртуальное окружение?".

До этого он работал нормально.

Я работаю на Mac m1, используя PyCharm Professional.

Мой Django установлен. Мой venv активирован. Итак, я предполагаю, что у меня проблема с PYTHONPATH .

Мой переводчик именно тот, который я хотел бы использовать: My interpreter

На самом деле у меня есть несколько версий Python. which Python показывает мне:

(venv) user_name@computer_name project_name % which python
python: aliased to /usr/bin/python3
(venv) user_name@computer_name project_name % which python3
/Users/user_name/PyCharmProjects/TrainingProjects/project_name/venv/bin/python3
(venv) user_name@computer_name project_name % which python3.9
/opt/homebrew/bin/python3.9

python3 -c "import sys; print(sys.path)" показывает мне:

/opt/homebrew/Cellar/python@3.10/3.10.7/Frameworks/Python.framework/Versions/3.10/lib/python310.zip
/opt/homebrew/Cellar/python@3.10/3.10.7/Frameworks/Python.framework/Versions/3.10/lib/python3.10
/opt/homebrew/Cellar/python@3.10/3.10.7/Frameworks/Python.framework/Versions/3.10/lib/python3.10/lib-dynload
/Users/user_name/PyCharmProjects/TrainingProjects/project_name/venv/lib/python3.10/site-packages

Если я правильно понимаю этот вывод, это означает, что в моем PYTHONPATH на данный момент нет python 3.9.

В моем файле settings.py есть:

import os
import sys #not active
from pathlib import Path

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
which $PYTHONPATH 

приносит мне PYTHONPATH not found.

echo $PYTHONPATH

не приносит мне ничего.

Экспорт:

export PYTHONPATH=$PYTHONPATH:/Library/Frameworks/Python.framework/Versions/3.9/bin/python3

не помогло.

Любая помощь будет высоко оценена.

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

Во-первых, давайте на секунду забудем о Python 3.9, Python 3.10 и PYTHONPATH

Во-вторых, давайте попробуем найти, где установлен django. Здесь ищется бин, который использует/доставляет django.

mdfind -name django-admin.py

которая вернулась

/Users/me/kds2/issues2/500.macos/010.fixed.p1.bin_old_py/obsolete/opt.python@3.8/django-admin.py
👉/Users/me/kds2/venvs/bme/bin/django-admin.py 1️⃣
👉/Users/me/kds2/venvs/bme/lib/python3.10/site-packages/django/bin/django-admin.py 2️⃣
/usr/local/lib/python3.8/site-packages/django/bin/django-admin.py

Я знаю свое окружение, поэтому я знаю, что интересны 2 под /venvs/bme.

На самом деле, я знаю, что 1️⃣ в /bin/ в основном загружает 2️⃣ в /site-packages/

Ваш django будет структурирован таким же образом, только в другом месте.

По вашим сообщениям на данный момент, я предполагаю, что ваша собственная вена находится на

/Users/user_name/PyCharmProjects/TrainingProjects/project_name/venv

Итак, cd в его bin (который также, вероятно, находится там, где вы запустили source activate)

cd /Users/user_name/PyCharmProjects/TrainingProjects/project_name/venv/bin

наберите следующую команду

ls -l

Вот что получается (после обрезки некоторых файлов из вывода):

-rw-r--r--   1 me  staff  1991  8 Jan  2022 activate
-rw-r--r--   1 me  staff   917  8 Jan  2022 activate.csh
-rw-r--r--   1 me  staff  2059  8 Jan  2022 activate.fish
-rwxr-xr-x   1 me  staff   242 24 Jun 14:04 pip
-rwxr-xr-x   1 me  staff   242 24 Jun 14:04 pip3
-rwxr-xr-x   1 me  staff   242 24 Jun 14:04 pip3.10
lrwxr-xr-x   1 me  staff    21  8 Jan  2022👉python -> /opt/local/bin/python
lrwxr-xr-x   1 me  staff     6  8 Jan  2022 python3 -> python
lrwxr-xr-x   1 me  staff     6  8 Jan  2022👉python3.10 -> python

OK, важно то, что это симлинки, указывающие на реальный Python, который управляет/хостит этот venv. Моя python указывает на /opt/local/bin/python, потому что я установил через macports, но ваша должна указывать на homebrews.

Может быть /opt/homebrew/Cellar/python@3.10 ?

Как вы видите, мой venv использует Python3.10. Я ожидаю, что ваш будет таким же, а не 3.9.

OK, теперь давайте посмотрим, что этот venv установил в качестве своего окружения?

./python3 -m site doc about command

Обратите внимание на ведущую точку. Это игнорирует PATH и все остальное и просто запускает локальный python3.

Что он выводит для меня, так это целую кучу полезной информации, о этом virtualenv.

sys.path = [
    '/Users/me/kds2/venvs/bme/bin',
    '/Users/me/Library/Python/3.10/lib/python/site-packages/_pdbpp_path_hack',
    '/opt/local/Library/Frameworks/Python.framework/Versions/3.10/lib/python310.zip',
    '/opt/local/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10',
    '/opt/local/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/lib-dynload',
    '/Users/me/kds2/venvs/bme/lib/python3.10/site-packages', 👈
    '/Users/me/kds2/mygithub/pynoorm',
    '/Users/me/kds2/mygithub/bmedev',
    '/Users/me/kds2/mygithub/pip_stripper',
    '/Users/me/kds2/py2',
    '/Users/me/kds2/mygithub/lazy-regression-tests/lazy_regression_tests',
    '/Users/me/Library/Python/3.10/lib/python/site-packages',
    '/opt/local/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages',
]
USER_BASE: '/Users/me/Library/Python/3.10' (exists)
USER_SITE: '/Users/me/Library/Python/3.10/lib/python/site-packages' (exists)
ENABLE_USER_SITE: True

Вышеприведенный список sys.path является местом, в котором находится import will try to find things. Look for ones ending with /site-packages`.

Для тех, кто ищет, попробуйте посмотреть, есть ли пакет django. Например, так.

ls -d /Users/me/kds2/venvs/bme/lib/python3.10/site-packages/django

Достаточно точно, в том же месте, где я нашел свой django-admin раньше.

/Users/jluc/kds2/venvs/bme/lib/python3.10/site-packages/django

Теперь, я не знаю, как pycharm и 3.9 связаны с этим, но это должно дать некоторое представление о том, как ваш venv собран вместе.

Возможно, вам лучше переустановить другой venv с django и начать заново. Ваш код не пострадает. Ваш вызов.

Вернуться на верх