我有一个 Python 导入,它是旧版 Windows DLL 的包装器;导入声明了 DLL 中函数的许多接口函数/包装器(主要是为了处理数据类型差异)。
我希望能够从外部控制导入加载哪个 DLL;像这样的东西:
if environment == 'release':
mydll = ctypes.cdll.LoadLibrary('../DLL/x64/Release/scanner64.dll')
elif environment == 'debug':
mydll = ctypes.cdll.LoadLibrary('../DLL/x64/Debug/scanner64.dll')
elif environment == 'local':
mydll = ctypes.cdll.LoadLibrary('./Scanner64.dll')
else:
print("Valid environments are release, debug, and local")
exit()
我尝试在我的主 Python 脚本中将“环境”声明为全局,但这不起作用。我还尝试将导入的大部分内容放入 init() 函数中,但这也不起作用(因为函数 defs 的范围在 init 函数内 - 对导入脚本不可见。
将所有逻辑都放在函数中,您可以延迟加载直到需要时
# library
mydll = None
def load(environment="local"):
global mydll
if environment == 'release':
mydll = ctypes.cdll.LoadLibrary('../DLL/x64/Release/scanner64.dll')
elif environment == 'debug':
mydll = ctypes.cdll.LoadLibrary('../DLL/x64/Debug/scanner64.dll')
elif environment == 'local':
mydll = ctypes.cdll.LoadLibrary('./Scanner64.dll')
else:
raise RuntimeError("Valid environments are release, debug, and local")
# rest of the logic
现在导入函数时,只需加载它即可
import mylibrary
mylibrary.load(environment)