You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
captainfffsama 05fe43b25d 修复示例中写错的地方 2 years ago
.gitignore
LICENSE
readme.md 修复示例中写错的地方 2 years ago
setup.py
zipimport2.pyx

readme.md

说明

参考了 python 标准库中 zipimport 源码,现在 zipimport2 支持加密 zip 包导入,并支持对 zip 包密码进行加密

安装方式

安装 Cython:

pip install Cython
pip install .

使用方式

假设你写了一个非常碉堡的包,比如叫iamsohandsome.py,其内容大概如下:

class IAmYourDaddy:
    def __init__(self):
        print("daddy coming")

然后我们想加密这个包,密码使用daddycoming,则可以执行以下命令:

zip -P daddycoming -r d.zip iamsohandsome.py

得到一个d.zip,这个压缩包中包含了你的包中的所有文件. 然后我们使用以下代码把明文密码daddycoming加密:

from zipimport2 import encrypt
print(encrypt("daddycoming"))

得到以下输出:

>>> >393>3>3.47333531343;3

这里 >393>3>3.47333531343;3 就是加密之后的密码.

然后加加密之后密码和加密zip包发给老王,老王在自己的代码中想要引入这个加密的包,可以使用如下方式:

from zipimport2 import zipimporter
zip_path="~/d.zip"
pwd=">393>3>3.47333531343;3"
# 若使用加密的密码,那么zipimporter 位置2的参数就用 True
i=zipimporter(zip_path+'@'+pwd,True)
# 这里 m 就是加载进来的 iamsohandsome 模块
m=i.load_module("iamsohandsome")
# 加载进来之后就可以使用包里面的方法和类
m.IAmYourDaddy()

可以得到以下输出:

>>> daddy coming

API 说明

  • zipimporter.__init__(self, path, pwd_encry=False) 总体和原始标准库差不多,就是新增一个 pwd_encry 指示用的是明文密码还是加密密码

  • encrypt(pwd:str) 用来帮助用户加密zip包的密码