#python #mysql #pytest #importerror #conftest
#python #mysql #pytest #importerror #conftest
Вопрос:
У меня есть приведенная ниже структура проекта
- root
- main.py
- test/
- __init__.py
- conftest.py
- test.py
У conftest.py
меня есть несколько пользовательских приспособлений mysql.connector
. Поэтому я импортирую:
import mysql.connector
@pytest.fixture(scope='module') # maintain connection for all tests
def cnx(database, username, password):
cnx = mysql.connector.connect(database=database, user=username, password=password)
yield cnx
cnx.close()
когда я запускаю test.py
с терминала в корневом каталоге с помощью приведенной ниже команды:
pytest tests/test.py
Я получаю следующую ошибку:
ImportError while loading conftest '/tests/conftest.py'.
tests/conftest.py:5: in <module>
import mysql.connector
E ModuleNotFoundError: No module named 'mysql'
Почему это происходит? mysql
определенно установлено.
Комментарии:
1. Попробуйте использовать псевдоним для вашего импорта: например, так:
import mysql.connector as MODULE_ALIAS
. PS: не забудьте заменитьmysql.connector.connect
наMODULE_ALIAS.connect
2. Если
import mysql
сбой, это означает, чтоmysql-connector-python
он не установлен. Как долженpython -m pytest
помочь запуск в этом случае?3. Если «это работает», потому что вы просто распаковали MySQL connector в корневой каталог проекта, это, безусловно, неправильный способ установки сторонних пакетов.
4. Я предполагаю, что вы не запускаете это из виртуальной среды python? Если нет, установлено ли у вас несколько версий python?
Ответ №1:
Вы пробовали запускать этот python в CLI? затем попробуйте import mysql.connector
, работает ли? Другое решение — удалить текущую версию MySQL и вместо этого попробовать этот пакет pip install mysql-connector-python-rf
Ответ №2:
Команда для запуска тестового скрипта pytest
не pytest tests/test.py
является, но
python -m pytest tests/test.py
как подробно описано в официальных документах.
Комментарии:
1.
python -m
защищает только версию используемого вами модуля python и считается наилучшей практикой. Это не влияет на саму команду (pytest tests/test.py
)