我有以下源代码结构
/testapp/
/testapp/__init__.py
/testapp/testmsg.py
/testapp/sub/
/testapp/sub/__init__.py
/testapp/sub/testprinter.py
其中testmsg
定义以下常量:
MSG = "Test message"
和sub/testprinter.py
:
import testmsg
print("The message is: {0}".format(testmsg.MSG))
但我得到了ImportError: No module named testmsg
自包装结构以来它不应该起作用吗?我真的不想在每个子模块中扩展sys.path,我甚至不想使用相对导入。
我在这里做错了什么?
答案 0 :(得分:16)
这完全取决于您运行的脚本。该脚本的路径将自动添加到python的搜索路径中。
使其具有以下结构:
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
然后首先运行TestApp/run_test.py
:
from testapp.sub.testprinter import functest ; functest()
然后TestApp/testapp/sub/testprinter.py
可以:
from testapp.testmsg import MSG
print("The message is: {0}".format(testmsg.MSG))
更多有用的提示here;
答案 1 :(得分:10)
使用下面的相对导入
from .. import testmsg
答案 2 :(得分:5)
这个问题有答案 - 动态导入:
How to import a python file in a parent directory
import sys
sys.path.append(path_to_parent)
import parent.file1
这是我进口任何东西的东西。当然,您还必须将此脚本复制到本地目录,导入它,并use
所需的路径。
import sys
import os
# a function that can be used to import a python module from anywhere - even parent directories
def use(path):
scriptDirectory = os.path.dirname(sys.argv[0]) # this is necessary to allow drag and drop (over the script) to work
importPath = os.path.dirname(path)
importModule = os.path.basename(path)
sys.path.append(scriptDirectory+"\\"+importPath) # Effing mess you have to go through to get python to import from a parent directory
module = __import__(importModule)
for attr in dir(module):
if not attr.startswith('_'):
__builtins__[attr] = getattr(module, attr)
答案 3 :(得分:1)
对于仍然存在相同问题的人。这就是我的解决方法:
public void pageloadstate() throws InterruptedException {
JavascriptExecutorjs = (JavascriptExecutor)driver;
Stringstates =null;
do{
states=js.executeScript("return document.readyState").toString();
Thread.sleep(3000);
System.out.println("pageloaded!!!: "+ states);}
while (states== "complete");
System.out.println("pageloaded sucessfully");
答案 4 :(得分:0)
试试这个:
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from my_module import *