python - Python:将库作为变量导入
问题描述
class A():
def __init__(self):
install_package('abc')
import abc
def sq(self):
print(abc.sqrt(5))
背景
我正在helper.py
为使用 python 运行应用程序(我发送给他们)的客户编写帮助程序类(全部存储在 a 中)。这些帮助类帮助应用程序功能。为了允许在客户端更快地部署,我编写了一个名为的函数install_package
,它隐式调用pip install
.
所有客户端都会收到相同的helper.py
文件,但会收到不同的应用程序。我发送给他们的应用程序通常使用来自helper.py
.
动机
所以我使用上述类结构的原因现在很明显,我不想在开头加载所有库,helper.py
因为这些库将install_package()
与它们对应。因此对于应用程序可能不会使用所有类的客户端,无需安装所有不必要的库
问题
现在的问题是,使用上述结构A()
似乎是一个可行的选择,但我在__init__
函数中导入的包没有全局导入,因此sq()
无法使用abc
库中的函数。解决此问题的最佳方法是什么?一种方法是将库存储在class
. 我该怎么做呢?也欢迎更改班级结构的建议!
解决方案
像这样的东西怎么样:
import importlib
class A():
def __init__(self):
install_package('abc')
self.abc = importlib.import_module('abc')
def sq(self):
print(self.abc.sqrt(5))
推荐阅读
- c# - .Add() 方法在 C# 中使用“for”循环构建列表时不起作用
- flutter - 如果它已经在索引堆栈中初始化,我如何将值传递给小部件?
- nginx - Laravel 8 URL 字符串,带有重复的 URL 名称作为参数
- r - 如何抑制 rmarkdown 文档中的下载进度消息/警告/r 中的闪亮?
- webrtc - WebRTC;点 1 到点 2 的共享屏幕连接已建立,轨道已发送但没有视频
- kubernetes - gcsfuse 在 GKE 上自行终止
- spring - 为什么 JmsListeners 不能共享一个公共的 Jms 连接?
- python - Pyspark:to_timestamp 返回不正确的时间戳值
- powerbi - 如何防止电源查询获取合并源表的数据?
- jmeter - 将响应时间数据从 Jmeter 获取到 csv