Я только начинаю с Python и имею больше опыта работы с C#\Java. Так что у меня болит голова, как мне импортировать мои модули Python в другой пользовательский модуль? Я уже пробовал пару вещей:
ТАК: Python не может найти мой модуль
ТАК: не могу импортировать свои собственные модули
SO: Ошибка импорта: модуль не назван при импорте моего собственного модуля < /а>
и еще несколько, но обычно мне предлагают использовать относительный импорт (используя соответствующее количество . перед оператором импорта). Мне это кажется хрупким, потому что, насколько мне известно, импорт является относительным и разрешается в зависимости от того, где был выполнен file.py.
Итак, вот структура моего проекта в PyCharm:
Project
├───lib
│ ├───__init__.py
│ ├───pages
│ │ ├───__init__.py
│ │ ├───pageA.py
│ │ └───pageB.py
│ └───actions
│ ├───__init__.py
│ ├───actionA.py
│ └───actionB.py
├───tests
│ ├───__init__.py
│ ├───base_test.py
│ └───search_test.py
└───main.py
В моем search_test.py я импортирую модуль from lib.actions.actionA import ActionA, в actionA.py я импортирую модуль типа from lib.pages.pageA import PageA. А вот мой main.py:
import unittest
from tests.search_test import SearchTest
def create_test_suite():
test_suite = unittest.TestSuite()
test_suite.addTest(SearchTest())
return test_suite
if __name__ == 'main':
suite = create_test_suite()
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
Когда я запускаю это в PyCharm, он работает отлично. Но теперь мне нужно запустить его из консоли:
D:\Projects\Python Projects> python -m unittest project_name.main
и я стою перед ImportError: no module named 'lib'. С этим:
D:\Projects\Python Projects\project_name> python main.py
Ничего не произошло.
Что я могу сделать? Должен ли я придерживаться относительного шаблона или есть импорт каких-то Java-подобных пакетов?
в вашем файле search_test.py import os import sys sys.path.append(os.path.join(os.path.dirname(file),’../’)) из lib.actions. actionA импортирует ActionA, а затем вы можете запускать его из любого каталога. — person Amrait Dalerian schedule 18.12.2020
