Предполагая, что ваш проект на самом деле содержится в каталоге проекта, например, ...
my_package
|
├── gen.py
├── lexer
│ ├── __init__.py
│ ├── engine.py
| └── ...
├── parser
| ├── __init__.py
| ├── engine.py
| └── ...
├── tests
| ├── test_thingy.py
в gen.py:
import my_package.lexer.engine
import my_package.parser.engine
в родительском каталоге my_package, выможет работать python -m my_package.gen
.Это должно работать точно так, как ожидается, без конфликтов имен.С аналогичными операторами импорта в ваших тестах, если вы выполняете свои тестовые модули таким же образом, все должно работать нормально.
Я проверил это со следующим.В E/work/temp/
у меня есть каталог с именем my_package
.Он имеет следующую структуру.
my_package
|
├── __init__.py # needed in python 2, but not 3
├── import_test_b.py
├── parser
| ├── __init__.py
| └── import_test_a.py
└── tests
├── __init__.py # needed in python 2 but not python 3
└── test_imports.py
import_test_a:
def test(num):
return num+3
import_test_b:
from my_package.parser.import_test_a import tst
print(tst(4))
test_imports.py:
from my_package.parser.import_test_a import tst
import unittest
class TestTst(unittest.TestCase):
def test_one(self):
self.assertEqual(tst(4), 7)
if __name__ == '__main__':
unittest.main()
в E/work/temp
:
запуск: python -m my_package.import_test_b
- выход = 7
запуск: python -m my_package.tests.test_imports
выход:.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK