У меня есть virtualenv, который использует Python 3 и в настоящее время использует pytest для тестирования. Я упаковал программу с именем «process_expiring_passwords» и импортировал этот пакет из моего общего файла сценария с именем «pep.py». Я также использовал pip в своем virtualenv для установки моего пакета process_expiring_passwords.
Однако, когда я запускаю свои тесты, я получаю следующую ошибку:
ImportError при импорте тестового модуля
«/home/username/projects/process-expiring-passwords/tests/test_process_expiring_passwords.py'.
Подсказка: убедитесь, что ваши тестовые модули / пакеты имеют правильные имена Python.
Traceback: tests / test_process_expiring_passwords.py: 3: в
из process_expiring_passwords import ProcessExpiringPasswords process_expiring_passwords / process_expiring_passwords.py: 16: в
from process_expiring_passwords.models.ProcessExpiringPasswordsLog
\ E ModuleNotFoundError: Модуль не указан
'process_expiring_passwords.models'; 'process_expiring_passwords' - это
не пакет
Есть ли конкретная причина, по которой я могу использовать свой пакет из общего файла сценария pep.py, в то время как pytest не может найти указанный пакет?
Основные части кода, связанные с этой проблемой, следующие:
pep.py:
from process_expiring_passwords.process_expiring_passwords \
import ProcessExpiringPasswords
pep = ProcessExpiringPasswords()
pep.process()
process_expiring_passwords / process_expiring_passwords.py:
from process_expiring_passwords.models.ProcessExpiringPasswordsLog \
import ProcessExpiringPasswordsLog
class ProcessExpiringPasswords:
def __init__(self):
self.example = 0
def process():
pepl = ProcessExpiringPasswordsLog()
process_expiring_passwords / модели / ProcessExpiringPasswordsLog.py:
class ProcessExpiringPasswordsLog():
def __init__(self):
self.example = 0
process_expiring_passwords / setup.py:
# ref: https://github.com/pypa/sampleproject/blob/master/setup.py
# ref: http://python-packaging.readthedocs.io/en/latest/minimal.html
from setuptools import setup
setup(
name='process_expiring_passwords',
version='0.0.1',
packages=find_packages(),
description='Process expiring passwords',
license='MIT',
install_requires=[
'apiclient',
'google-api-python-client',
'httplib2',
'mysqlclient',
'oauth2client',
'requests',
'SQLAlchemy',
],
)
Тесты / test_process_expiring_passwords.py:
from process_expiring_passwords import ProcessExpiringPasswords
def test_pep():
pep = ProcessExpiringPasswords()
assert pep is not None
Структура проекта:
process_expiring_passwords
pep.py
process_expiring_passwords
__init__.py
models
__init__.py
ProcessExpiringPasswordsLog.py
process_expiring_passwords.py
setup.py
tests
test_process_expiring_passwords.py
Примечания:
- Обновлен пример кода и setup.py на основе отзывов от Мэтта
Мессерсмит.