Если вы выполняете app/server.py
в качестве скрипта, родительский каталог app
не добавляется к sys.path()
. Вместо этого добавляется каталог app
(не как пакет, а как путь поиска импорта).
У вас есть 3 варианта:
server.py
out пакета app
(рядом с ним) app
, который работает только: from app import server
server.main()
server.py
до sys.path
: import os.path
import sys
parent = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent)
Этот последний вариант может вызвать больше проблем; теперь как пакет app
, так и модули, содержащиеся в , пакет app
находятся на sys.path
. Вы можете импортировать как app.server
, так и server
, и Python увидит их как два отдельных модуля, каждый со своей собственной записью в sys.modules
, с отдельными копиями своих глобал.