而不是文件,python,python-import"/>

首页 > 解决方案 > 进口于而不是文件

问题描述

在 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

最后一行。

标签: pythonpython-import

解决方案


推荐阅读