У меня есть несколько сценариев (app.py
и app2.py
), я хочу, чтобы они могли запускаться main.py
в родительском каталоге, а также запускаться напрямую.
структура проекта:
main.py
package
├── __init__.py
├── app.py
├── helper.py
package2
├── __init__.py
├── app2.py
├── helper.py
main.py
from package import app
from package2 import app2
пакет / app.py
from .helper import greeting
greeting()
пакет / helper.py
def greeting():
print('hello')
package2 / app2.py
from .helper import greeting
greeting()
package2 / helper.py
def greeting():
print('hello in package 2')
когда я запускаю main.py
, печатается
hello
hello in package 2
это правильно, но я не могу запустить package/app.py
напрямую, он выдаст ошибку attempted relative import with no known parent package
Одно решение, которое я нашел в stackoverflow, это изменение кода внутри main.py
на:
import sys
sys.path.insert(0,'package')
sys.path.insert(0,'package2')
from package import app
from package2 import app2
затем удалите точку в app.py
и app2.py
. Теперь я могу их напрямую, но новая проблема - когда я запускаю main.py
, он печатает
hello in package 2
hello in package 2
что не так.
другое решение: app.py
и app2.py
:
if __name__ == "__main__":
from helper import greeting
else:
from .helper import greeting
greeting()
Это решило все мои проблемы, мне просто интересно, это правильный способ сделать это?