Внезапно ImportError: Не удалось импортировать Django. Вы уверены, что он установлен и доступен в вашей переменной окружения PYTHONPATH?
Внезапно мой проект Django показал мне следующую ImportError: "ImportError: Не удалось импортировать Django. Вы уверены, что он установлен и доступен в вашей переменной окружения PYTHONPATH? Вы забыли активировать виртуальное окружение?".
До этого он работал нормально.
Я работаю на Mac m1, используя PyCharm Professional.
Мой Django установлен. Мой venv активирован. Итак, я предполагаю, что у меня проблема с PYTHONPATH .
Мой переводчик именно тот, который я хотел бы использовать:
На самом деле у меня есть несколько версий 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 и начать заново. Ваш код не пострадает. Ваш вызов.