Модуль импортируется под синтаксически ложным пространством имен? - PullRequest
1 голос
/ 24 марта 2020

Я следую за курсом О'Рейли Хэд Первый Python (2-е издание). В какой-то момент вы создадите веб-приложение и развернете его в pythonanywhere (глава 5).

В веб-приложении используются две функции, импортированные из модуля, созданного ранее.

Модуль называется vsearch.py , Я также создал readme.txt и setup.py и использовал setuptools для создания исходного дистрибутивного файла, используя:

python3 setup.py sdist

Код в файле setup.py читайте следующим образом:

from setuptools import setup

setup(
    name = "vsearch",
    version = "1.0",
    description = "The Head First Python Seach Tools",
    author = "HF Python 2e",
    author_email = "hfpy2e@gmail.com",
    url = "headfirstlabs.com",
    py_modules = ["vsearch"],
)

Исходный дистрибутивный файл создается без ошибок и создает файл с именем vsearch-1.0.tar.gz

Затем файл загружается в pythonanywhere и устанавливается через консоль с помощью: python3 -m pip install vsearch-1.0.tar.gz --user

Выводы консоли:

15:36 ~/mysite $ python3 -m pip install vsearch-1.0.tar.gz --user
Looking in links: /usr/share/pip-wheels
Processing ./vsearch-1.0.tar.gz
Building wheels for collected packages: vsearch
  Running setup.py bdist_wheel for vsearch ... done
  Stored in directory: /home/Mohr/.cache/pip/wheels/85/fd/4e/5302d6f3b92e4057d341443ed5ef0402eb04994663282c12f7
Successfully built vsearch
Installing collected packages: vsearch
  Found existing installation: vsearch 1.0
    Uninstalling vsearch-1.0:
      Successfully uninstalled vsearch-1.0
Successfully installed vsearch-1.0

Теперь, когда я пытаюсь запустить свое веб-приложение, я получаю следующую ошибку:

2020-03-24 16:18:14,592: Error running WSGI application
2020-03-24 16:18:14,592: ModuleNotFoundError: No module named 'vsearch'
2020-03-24 16:18:14,593:   File "/var/www/mohr_eu_pythonanywhere_com_wsgi.py", line 16, in <module>
2020-03-24 16:18:14,593:     from vsearch4web import app as application  # noqa
2020-03-24 16:18:14,593: 
2020-03-24 16:18:14,593:   File "/home/Mohr/mysite/vsearch4web.py", line 3, in <module>
2020-03-24 16:18:14,593:     from vsearch import search4letters

Исходя из этой ошибки, я предполагаю, что «vsearch» не может быть найден, поскольку он был установлен как «vsearch-1.0». ». Однако, когда я пытаюсь изменить эту строку на:

from vsearch-1.0 import search4letters

, я по праву получаю ошибку синтаксиса, так как не могу адресовать модули таким способом. Так что я могу с этим поделать? При создании модуля в начале я добавил номер версии в файл setup.py, потому что согласно лекции это хорошая практика. Затем Setuptools автоматически создает исходный дистрибутивный файл с «-1.0» в конце. Кроме того, при импорте с использованием команды, показанной выше, я автоматически получаю значение importt как «vsearch-1.0», на которое, в свою очередь, я не могу ссылаться в своем коде python из-за плохого синтаксиса.

Я что-то не так делаю? Есть ли способ импортировать это в другом пространстве имен? Есть ли способ сослаться на «vsearch-1.0» в моем python коде без получения ошибки синтаксиса?

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

В PythonAnywhere установлены разные версии python3. Когда вы устанавливаете что-либо, используя python3 -m pip или pip3, вы используете значение по умолчанию python3, которое, вероятно, не соответствует настройке версии вашего веб-приложения python. Используйте python3.7 и pip3.7 или python3.6 и pip3.6 et c. для --user установок обязательно.

1 голос
/ 24 марта 2020

pip install --user (с выделенным --user) установил пакет в каталог пользователя: /home/Mohr/.local/lib/pythonX.Y/site-packages/.

Для запуска приложения WSGI вы, вероятно, используете виртуальную среду, в которой установленные пользователем модули недоступны. Чтобы использовать модули в venv, вы должны установить все в venv. Поэтому активируйте venv в терминале и установите модуль с помощью venv's pip:

pip install vsearch-1.0.tar.gz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...