我有一个python应用程序具有以下目录结构:
src
|
+---- main
|
+---- util
|
+---- gen_py
|
+---- lib
Run Code Online (Sandbox Code Playgroud)
在包main中,我有一个名为MyServer.py的python模块,它有一个import语句,如:
from gen_py.lib import MyService
Run Code Online (Sandbox Code Playgroud)
为了使这个语句起作用,我将以下行放在MyServer.py的开头:
import sys
sys.path.append('../gen_py/lib')
Run Code Online (Sandbox Code Playgroud)
当我在终端中运行MyServer.py时,出现以下错误:
ImportError:没有名为gen_py.lib的模块
我在这里缺少什么?
我可以将一个import语句放在一个字符串中,执行它,它可以工作(打印一个随机数字):
code = """
import random
def f():
print random.randint(0,9)
"""
def f():
pass
exec code
f()
Run Code Online (Sandbox Code Playgroud)
现在,如果我把exec code
和f()
自己的功能和调用它,这是行不通的.
def test():
exec code
f()
test()
Run Code Online (Sandbox Code Playgroud)
它说NameError: global name 'random' is not defined
.知道发生了什么事吗?谢谢
我有一个Python模块,我想动态导入只给出一个模块名称的字符串.通常我使用importlib
或者__import__
这很好用,因为我知道我想从模块导入哪些对象,但是有没有办法import *
动态地做同样的事情.还是有更好的方法?
我一般都知道使用它的不良做法,import *
但我试图导入的模块是动态自动生成的,我无法知道包含我正在寻址的类的确切模块.
谢谢.