python - 进口于而不是文件
问题描述
在 Python 中,我有 .pyd 共享库,该库被加密为 .epyd 并且我使用它来读取和解密
with open('src_nuitka/src.epyd', 'rb') as f:
my_pyd_module = decrypt(f.read())
现在我想直接使用<class 'bytes'>
对象导入模块my_pyd_module
而不先写入磁盘。我怎样才能做到这一点?由于它不是 Python 代码字符串,因此我无法使用exec
. 是否有可用于此任务的导入挂钩?所有编写导入钩子的示例都使用exec
或通过直接实例化类来实现这一点,如https://dev.to/dangerontheranger/dependency-injection-with-import-hooks-in-python-3-5hap。
所以这是我第一次尝试使用@a_guest 和https://dev.to/dangerontheranger/dependency-injection-with-import-hooks-in-python-3-5hap的想法(还没有加密/解密):
import importlib.abc
import importlib.machinery
import sys
class DependencyInjectorFinder(importlib.abc.MetaPathFinder):
def __init__(self, loader):
self._loader: DependencyInjectorLoader = loader
def find_spec(self, fullname, path, target=None):
if fullname == 'src2':
return importlib.machinery.ModuleSpec(fullname, self._loader)
class DependencyInjectorLoader(importlib.machinery.ExtensionFileLoader):
def get_data(self, path):
with open('src_packaged/src_dist/src.pyd', 'rb') as f:
module = f.read()
return module
sys.meta_path.append(DependencyInjectorFinder(DependencyInjectorLoader('src2', 'src2')))
import src2
这导致
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad argument type for built-in operation
最后一行。
解决方案
推荐阅读
- javascript - Puppeteer 无法在 heroku 上找到选择器,但在本地工作
- dynamics-crm - 具有空 ChangedData 行的 Dynamics CRM
- python - 我正在测试一些模块及其功能,但是当我运行它时,它说:
- python - 将多行附加到空数据框中的特定列
- mysql - Mysql Innodb 表中允许的最大行数
- c++ - 如何将图像拆分为 M x N 个图块
- redis - Redis multi - 它是线程安全的吗?
- c# - Visual Studio xamarin.forms 中的秒表在反应时间测试中增加了 100 毫秒
- javascript - 如何在单选按钮单击时映射数据?
- r - 如果时间在时间戳的 X 分钟内(时间戳加或减),则加入数据帧