python导入上层目录的包_从父目录导入Python包

I've the following source code structure

/testapp/

/testapp/__init__.py

/testapp/testmsg.py

/testapp/sub/

/testapp/sub/__init__.py

/testapp/sub/testprinter.py

where testmsg defines the following constant:

MSG = "Test message"

and sub/testprinter.py:

import testmsg

print("The message is: {0}".format(testmsg.MSG))

But I'm getting ImportError: No module named testmsg

Shouldn't it be working since the package structure? I don't really want to extend sys.path in each submodule and I don't even want to use relative import.

What am I doing wrong here?

解决方案

It all depends on which script you run. That script's path will be added to python's search path automatically.

Make it the following structure:

TestApp/

TestApp/README

TestApp/LICENSE

TestApp/setup.py

TestApp/run_test.py

TestApp/testapp/__init__.py

TestApp/testapp/testmsg.py

TestApp/testapp/sub/

TestApp/testapp/sub/__init__.py

TestApp/testapp/sub/testprinter.py

Then run TestApp/run_test.py first:

from testapp.sub.testprinter import functest ; functest()

Then TestApp/testapp/sub/testprinter.py could do:

from testapp.testmsg import MSG

print("The message is: {0}".format(testmsg.MSG))

More good hints here;

THE END
< <上一篇
下一篇>>