Django: нет модуля с именем psycopg2 при запуске миграции на heroku - PullRequest
0 голосов
/ 31 октября 2019

Я новичок в django, и я создал веб-сайт, и сейчас я нахожусь в фазе развертывания, все хорошо работает до запуска миграции с базы данных на сервер. Я покажу вам все, что я сделал с начала

структуры моего проекта

OC_project8/
    pur_beurre/
        catalog/
            dumps/
                catalog.json
            ...        # other classic file
        media/
        pur_beurre/
            static/
                .gitignore
            ...        # other classic file
        static/
        templates/
        users/
        manage.py
        Procfile
    venv/
    requirements.txt/
        certifi==2019.9.11
        chardet==3.0.4
        coverage==4.5.4
        dj-database-url==0.5.0
        Django==2.2.6
        django-debug-toolbar==2.0
        gunicorn==19.9.0
        idna==2.8
        mysqlclient==1.4.4
        Pillow==6.2.0
        pytz==2019.3
        requests==2.22.0
        sqlparse==0.3.0
        urllib3==1.25.6
        whitenoise==4.1.4
    .gitignore/

Все команды были выполнены в виртуальной среде, например:

(venv) ~/OC_project8/pur_beurre$ sudo apt-get install python-psycopg2

Я выполнил все необходимые шаги перед запуском команды git push heroku master (git commit, heroku create my-app ...), если вам нужно больше подробностей об этих шагах, сообщите мне.

После запуска команды git push heroku master у меня была эта ошибка:

....

remote:        Collecting pkg-resources==0.0.0 (from -r /tmp/build_cac68f54540915062647a425c52dc61b/requirements.txt (line 11)) 
remote:          Could not find a version that satisfies the requirement pkg-resources==0.0.0 (from -r/tmp/build_cac68f54540915062647a425c52dc61b/requirements.txt (line 11)) (from versions: )
remote:        No matching distribution found for pkg-resources==0.0.0 (from -r /tmp/build_cac68f54540915062647a425c52dc61b/requirements.txt (line 11))
remote:  !     Push rejected, failed to compile Python app.
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !       Push rejected to pur-beurre-oc8.
remote: 
To https://git.heroku.com/pur-beurre-oc8.git
! [remote rejected] master -> master (pre-receive hook declined)
error: impossible de pousser des références vers 'https://git.heroku.com/pur-beurre-oc8.git'

Я увидел в stackoverflow, что мне нужно сделать это:

pip uninstall pkg-resources==0.0.0

После того, как я сделал коммит:

git add requirements.txt
git commit -m "uninstalling pkg-resources==0.0.0"

А теперь git push heroku master работают нормально, но когда я захожу на свой веб-сайт, у меня была ошибка: Apllication error. Я не знаю, промок ли я, но думаю, потому что я еще не выполнил миграцию базы данных.

Поэтому я запускаю команду heroku run python pur_beurre/manage.py migrate

И теперь у меня былоэта ошибка:

Running python pur_beurre/manage.py migrate on ⬢ pur-beurre-oc8... up, run.4138 (Free)
Traceback (most recent call last):
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 20, in <module>
    import psycopg2 as Database
ModuleNotFoundError: No module named 'psycopg2'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "pur_beurre/manage.py", line 21, in <module>
    main()
  File "pur_beurre/manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
    class AbstractBaseUser(models.Model):
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py", line 117, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py", line 321, in add_to_class
    value.contribute_to_class(cls, name)
  File "/app/.heroku/python/lib/python3.6/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 "/app/.heroku/python/lib/python3.6/site-packages/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 201, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 110, in load_backend
    return import_module('%s.base' % backend_name)
  File "/app/.heroku/python/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/app/.heroku/python/lib/python3.6/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: No module named 'psycopg2'

Я не знаю, почему у меня есть эта ошибка, поскольку psycopg2 - это библиотека, необходимая для использования PostgreSQL, а я использую MySQL, вот мои settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   
        'NAME': 'openfoodfacts',             
        'USER': 'root',
        'PASSWORD': 'my-password',        
        'HOST': '',                    
        'PORT': '5432',                         
    }
}

В любом случае после этой ошибки я пытался установить psycopg2:

pip install psycopg2

Но у меня была другая ошибка:

Collecting psycopg2
  Downloading https://files.pythonhosted.org/ packages/84/d7/6a93c99b5ba4d4d22daa3928b983cec66df4 536ca50b22ce5dcac65e4e71/psycopg2-2.8.4.tar.gz (377kB)
    100% |████████████████████████████████| 378kB 1.8MB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/home/rouizi/OC_project8/venv/lib/python3.6/site-packages/setuptools/__init__.py", line 12, in <module>
        import setuptools.version
      File "/home/rouizi/OC_project8/venv/lib/python3.6/site-packages/setuptools/version.py", line 1, in <module>
        import pkg_resources
    ModuleNotFoundError: No module named 'pkg_resources'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-gf4fxs4k/psycopg2/

Может быть, я получил эту ошибку, потому что я удалил вначинающие пкг-ресурсы! Но я попытался переустановить pkg-resources:

sudo apt-get install --reinstall python-pkg-resources

И я повторно запустил команду pip install psycopg2, но все еще выдает ту же ошибку

При поиске в Google я нашел здесь НетМодуль с именем pkg_resources , что необходимо было выполнить эту команду:

wget https://bootstrap.pypa.io/ez_setup.py -O - | python

И я перезапустить команду pip install psycopg2, но у меня есть другая ошибка:

Collecting psycopg2
  Using cached https://files.pythonhosted.org/ packages/84/d7/6a93c99b5ba4d4d22daa3928b983cec66df 4536ca50b22ce5dcac65e4e71/psycopg2-2.8.4.tar.gz
    Complete output from command python setup.py egg_info:
    running egg_info
    creating pip-egg-info/psycopg2.egg-info
    writing pip-egg-info/psycopg2.egg-info/PKG-INFO
    writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
    writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
    writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'

    Error: pg_config executable not found.

    pg_config is required to build psycopg2 from source.  Please add the directory
    containing pg_config to the $PATH or specify the full executable path with the
    option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

    If you prefer to avoid building psycopg2 from source, please install the PyPI
    'psycopg2-binary' package instead.

    For further information please check the 'doc/src/install.rst' file (also at
    <http://initd.org/psycopg/docs/install.html>).


    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-sglmdb2o/psycopg2/

И еслиЯ запускаю команду which pg_config, она ничего не возвращает, но после некоторого исследования я нашел здесь Исполняемый файл pg_config не нашел , что необходимо было выполнить эту команду:

sudo apt-get install libpq-dev

и теперь which pg_config верните это:

/usr/bin/pg_config

Итак, я перезапустил pip install psycopg2 и произошла другая ошибка:

Collecting psycopg2
  Using cached https://files.pythonhosted.org/ packages/84/d7/6a93c99b5ba4d4d22 daa3928b983cec66df4536ca50b22ce5dcac65e4e71/psycopg2-2.8.4.tar.gz
Building wheels for collected packages: psycopg2
  Running setup.py bdist_wheel for psycopg2 ... error
  Complete output from command /home/rouizi/OC_project8/venv/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-lu4ihs81/psycopg2/setup.py';f=getattr(tokenize,    
'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmphgjf714ppip-wheel- --python-tag cp36:
  usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
     or: -c --help [cmd1 cmd2 ...]
     or: -c --help-commands
     or: -c cmd --help

  error: invalid command 'bdist_wheel'

  ----------------------------------------
  Failed building wheel for psycopg2
  Running setup.py clean for psycopg2
Failed to build psycopg2
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... error



           #I cut here because it's very long


    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-lu4ihs81/psycopg2/setup.py", line 611, in <module>
        'Documentation': 'http://initd.org/psycopg/docs/',
      File "/home/rouizi/OC_project8/venv/lib/python3.6/site-packages/setuptools/__init__.py", line 129, in setup
        return distutils.core.setup(**attrs)
      File "/usr/lib/python3.6/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/usr/lib/python3.6/distutils/dist.py", line 955, in run_commands
        self.run_command(cmd)
      File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/home/rouizi/OC_project8/venv/lib/python3.6/site-packages/setuptools/command/install.py", line 61, in run
        return orig.install.run(self)
      File "/usr/lib/python3.6/distutils/command/install.py", line 601, in run
        self.run_command(cmd_name)
      File "/usr/lib/python3.6/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/home/rouizi/OC_project8/venv/lib/python3.6/site-packages/setuptools/command/install_scripts.py", line 17, in run
        import setuptools.command.easy_install as ei
      File "/home/rouizi/OC_project8/venv/lib/python3.6/site-packages/setuptools/command/easy_install.py", line 47, in <module>
        from setuptools.sandbox import run_setup
      File "/home/rouizi/OC_project8/venv/lib/python3.6/site-packages/setuptools/sandbox.py", line 15, in <module>
        import pkg_resources.py31compat
    ModuleNotFoundError: No module named 'pkg_resources.py31compat'

    ----------------------------------------
Command "/home/rouizi/OC_project8/venv/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-lu4ihs81/psycopg2/setup.py';f=getattr(tokenize, 'open', open)(__file__)
;code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-eya3xv3b-record/install-record.txt --single-version-externally-managed 
--compile --install-headers /home/rouizi/OC_project8/venv/include/site/python3.6/psycopg2" failed with error code 1 in /tmp/pip-build-lu4ihs81/psycopg2/

Я попробовал эту команду:

sudo apt-get install --reinstall python-setuptools

А теперь, когдаЯ пытаюсь запустить pip install psycopg2, он возвращается ко мне:

Requirement already satisfied: psycopg2 in /home/rouizi/OC_project8/venv/lib/python3.6/site-packages

Но если я пытаюсь запустить команду heroku run python pur_beurre/manage.py migrate, у меня все равно появляется ошибка:

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'

Но если язапустить sudo apt-get install python-psycopg2 Это сработало, но у меня все еще есть ошибка при запуске heroku run python pur_beurre/manage.py migrate Так как у меня все еще была та же ошибка, поэтому я попытался удалить psycopg2:

sudo pip uninstall psycopg2

Но мне возвращаются, что:

The directory '/home/rouizi/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Not uninstalling psycopg2 at /usr/lib/python2.7/dist-packages, outside environment /usr  

И вот я застрял на день, не найдя решения, надеюсь, вы поможете

извините за длинный пост и замоя ошибка

1 Ответ

0 голосов
/ 01 ноября 2019

Я решил свою проблему! Я запустил команду pip install psycopg2, она возвращает мне ошибку:

ModuleNotFoundError: No module named 'pkg_resources.py31compat'

Но если я попытаюсь повторить команду pip install psycopg2, она говорит:

Requirement already satisfied: psycopg2 in /home/rouizi/OC_project8/venv/lib/python3.6/site-packages

Так что япопытался зафиксировать мое изменение:

pip freeze > requirements.txt
git add requirements.txt
git commit -m "installing psycopg2"
git push heroku master

А теперь heroku run python pur_beurre/manage.py migrate отлично работает.

Я не знаю почему, так как у меня была ошибка, если у кого-то есть объяснение, будет хорошо

...