你好陌生人,请不要试图越过权限文章,谢谢!

python打包代码成whl——离线安装依赖相关总结

前言

  python语言在研发一些小场景的业务逻辑下,存在在内网下使用代码的情况,而内网工控机又不能够使用exe等可执行文件,那么python使用pyinstaller的打包方法就失效了,你必须能让python的代码能够执行,所以我搜索到了打包成库以及离线安装依赖的方法,记录一下。

实现

  内网环境下必须具备python环境与pip环境。

  第一步,需要先生存requirements.txt文件,生成的方式比较简单,在根目录执行一下命令

1
2
pip install pipreqs
pipreqs ./ --force --encoding="utf8"

  第二步需要导出所需要的依赖包,-d后表达的是安装包存储的路径,命令如下:

1
pip download -r requirement.txt -d ./pip_packages

  第三步则需要构建封装成库的必要文件,首先需要新建一个包类,这是你库的名字,比如: jian-packages,那么你库名就是这个,然后在包中新建一个setup.py,代码参考如下:

1
2
3
4
5
6
7
8
9
10
11
import setuptools
from setuptools import setup

setup(
name='jian-packages', # 包名
version='1.0', # 版本
description='', # 描述
author='Jianfreespace', # 作者
author_email='underpig@163.com', # 作者邮箱
packages=setuptools.find_packages() # 需要封装的所有包
)

  然后就可以在包里面把你所需要的模块全部拉取进来,封装成一个包,值得注意的是,你写的代码所依赖的第三方文件打包后是不会把第三方依赖打包进去的,所以若包代码中存在调用第三方模块的情况,则需要使用上述方法导出依赖,然后基于ImportError的异常类去判断是否存在相关依赖,若不存在则安装依赖包,代码参考:

1
2
3
4
5
6
7
8
9
try:
from Crypto import Random
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5

except ImportError as error:
from os import system,getcwd
requireDirPath = "pip install --no-index --find-links={}\pip_packages -r {}\\requirements.txt".format(getcwd(),getcwd())
system(requireDirPath)
1
pip install --no-index --find-links=d:\packages -r requirements.txt

  然后就可以根据此异常去判断自动安装依赖了,达到在内网环境下直接调用封装的代码并不需要联网安装依赖。

总结

  唯一甲方的不断催促才能让我想一些奇奇怪怪的方式,难顶。