#python #django #pandas #psycopg2 #pipenv
#python #django #панды #psycopg2 #pipenv
Вопрос:
Я разработал проект Django webapp с использованием Django 2.2.1 на python 3.7.2 в виртуальной среде pipenv версии 2018.11.26 в MacBook Air. После непреднамеренного обновления до python 3.8 brew upgrade
возникли проблемы с работой моего веб-приложения и его запуском. Я установил pipenv pip3 install pipenv
, скопировал и вставил папку проекта и использовал ее с другим именем, удалил Pipfiles и запустил pipenv install
, но произошла ошибка:
✘ Locking Failed!
ERROR:pip.subprocessor:Command errored out with exit status 1:
....
....
После нескольких часов проб и ошибок я обнаружил, что проблема связана с версией некоторых пакетов в моем requirements.txt . У меня есть эти пакеты в моем проекте:
backports.csv==1.0.7
certifi==2019.3.9
chardet==3.0.4
defusedxml==0.6.0
diff-match-patch==20181111
Django==2.2.1
django-allauth==0.39.1
django-ckeditor==5.6.1
django-crispy-forms==1.7.2
django-finalware==1.0.0
django-import-export==1.2.0
django-js-asset==1.2.2
django-recaptcha==2.0.5
et-xmlfile==1.0.1
gunicorn==19.9.0
html5lib==1.0.1
idna==2.8
jdcal==1.4
numpy==1.16.3
oauthlib==3.0.1
odfpy==1.4.0
openpyxl==2.6.1
pandas==0.24.1
Pillow==5.4.1
psycopg2==2.7.7
psycopg2-binary==2.7.7
pycparser==2.19
pyparsing==2.3.1
PyPDF2==1.26.0
Pyphen==0.9.5
python-dateutil==2.8.0
python3-openid==3.1.0
pytz==2019.1
PyYAML==3.13
reportlab==3.5.21
requests==2.21.0
requests-oauthlib==1.2.0
six==1.12.0
sqlparse==0.3.0
tablib==0.13.0
urllib3==1.24.3
webencodings==0.5.1
whitenoise==4.1.2
xhtml2pdf==0.2.3
xlrd==1.2.0
xlwt==1.3.0
Первая проблема была для pandas 0.24.1, и я удалил ее номер версии, затем pipenv удалось заблокировать, но не удалось установить два других пакета
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (1cd6d8)!
Installing dependencies from Pipfile.lock (1cd6d8)…
An error occurred while installing psycopg2==2.7.7 ....
...
...
... Will try again.
An error occurred while installing psycopg2-binary==2.7.7 ....
...
...
... Will try again.
...
ERROR: Couldn't install package: psycopg2
Package installation failed...
☤ ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 1/2 — 00:00:34
Затем я удалил номер версии для psycopg2 и psycopg2-binary, удалил созданную виртуальную среду и Pip-файлы и запустил установку pipenv, и она прошла успешно.
...
...
✔ Success!
Updated Pipfile.lock (187945)!
Installing dependencies from Pipfile.lock (187945)…
🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 47/47 — 00:04:21
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Затем я запустил оболочку pipenv и python manage.py runserver, но сообщения об ошибках были такими, как показано ниже:
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/utils/autoreload.py", line 54, in wrapper
fn(*args, **kwargs)
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
autoreload.raise_last_exception()
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/utils/autoreload.py", line 77, in raise_last_exception
raise _exception[0](_exception[1]).with_traceback(_exception[2])
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/utils/autoreload.py", line 54, in wrapper
fn(*args, **kwargs)
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/apps/config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/contrib/auth/models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/db/models/base.py", line 117, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/db/models/base.py", line 321, in add_to_class
value.contribute_to_class(cls, name)
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/db/models/options.py", line 204, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/db/__init__.py", line 28, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/db/utils.py", line 201, in __getitem__
backend = load_backend(db['ENGINE'])
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/db/utils.py", line 110, in load_backend
return import_module('%s.base' % backend_name)
File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 24, in <module>
raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: dlopen(/Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so, 2): Symbol not found: _PQencryptPasswordConn
Referenced from: /Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so
Expected in: /usr/lib/libpq.5.dylib
in /Users/<My name>/.local/share/virtualenvs/abc-4UXo2PdO/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so
Я искал это, но нашел аналогичную проблему, но ничего не нашел в качестве решения. Не могли бы вы взглянуть на эти сообщения и показать мой правильный способ запуска моего проекта django webapp?
Ответ №1:
Как вы сказали, вы обновляете непреднамеренно, почему вы не пытаетесь снова перейти на рабочую версию python?
Чтобы изменить вашу версию Python:
Деактивируйте текущий сеанс среды.
Если у вас установлено много пакетов или библиотек, было бы неплохо создать requirements.txt досье. Не забудьте отредактировать версию по мере необходимости.
Удалите virtualenv с помощью команды-оболочки: rmvirtualenv
Это удалит virtualenv, но оставит файлы вашего проекта.
Создайте новый virtualenv с нужной вам версией Python.
Пример: mkvirtualenv -p python3 env-name
Вы можете указать версию Python с помощью флага -p и версии. Если у вас есть requirements.txt файл, вы можете указать это с помощью -r requirements.txt
Теперь привяжите свой новый virtualenv к каталогу вашего проекта. Вы можете указать полные пути, но проще активировать ваш новый virtualenv и находиться в каталоге вашего проекта. Затем выполните команду:
Пример: setvirtualenvproject
Прочитайте документы для получения более подробной информации: http://virtualenvwrapper.readthedocs.io/en/latest /
шрифт: https://mikebarkas.dev/2016/change-python-version-in-virtualenvwrapper /
удачи!
Ответ №2:
Я новичок в Django, и после того, как я полностью настроил свою виртуальную среду, я закрыл свой компьютер и попытался открыть свой проект на следующий день. Я понятия не имел, что делать для работы над моим существующим проектом, затем я следую тому же процессу активации виртуальной среды на моем существующем venv.
Вот что я делаю:
-
Откройте свой cmd, перейдите в папку, в которой вы создали venv
-
Перейдите к существующей папке venv
-
Затем перейдите в папку Scripts
-
Как только вы окажетесь в папке Scripts, напишите activate и нажмите enter.
Это может кому-то помочь. Спасибо