Вот (не очень чистый) способ.
|--main.py
|--sideproject/
| |--sub_main.py
| |--test.py
| |--__init__.py
В main.py:
from sideproject import sub_main
def func_in_main():
return sub_main.func_in_sub_main()
if __name__ == "__main__":
print(func_in_main())
В sub_main.py:
if __name__ == "__main__":
# If sub_main is run directly.
# Use regular imports.
import test
print(test.func_in_test())
else:
# If sub_main is imported by main.
# Need to do imports relative to package.
from . import test
def func_in_sub_main():
return(test.func_in_test())
In test.py:
__all__ = ["func_in_test"]
def func_in_test():
return 123
In init.py: (пусто)
результат:
gino:test$ ls
total 8
-rw-rw-r-- 1 gino gino 150 1月 24 09:05 main.py
drwxrwxr-x 3 gino gino 4096 1月 24 08:57 sideproject
gino:test$ python3 main.py
123
gino:test$ cd sideproject
gino:test$ python3 sub_main.py
123
Но я бы посоветовал подумать о том, почему вам нужно запустить sub_main напрямую.Я рекомендую рассмотреть структурирование sideproject как пакета, используя sub_main как своего рода объявление публичного API (или объявление публичных API в init .py) затем всегда запускается приложение из main.py (импорт sideproject ).