Python离线迁移虚拟环境并在离线机器上打包程序为exe
一、在线机器创建虚拟环境
1.在线机器上创建虚拟环境并激活
可使用conda/python等方式
2.安装必要的包
如
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple`
3.生成依赖文件
pip freeze > requirements.txt
4.下载包文件
pip download -r requirements.txt -d packages
二、离线机器迁移虚拟环境
1.离线python创建虚拟环境:
以管理员身份运行cmd
python -m venv pyvenvtest
2.激活环境(C:\Windows\System32替换为自己的python的安装路径)
Call C:\Windows\System32\pyvenvtest\Scripts\activate.bat
3.安装依赖
将在线机器下载的packages文件夹以及requirement.txt文件传至离线机器,通过以下方式安装
方式①
转到packages2文件夹获取所有文件名
Get-ChildItem -Name | Out-File filenames.txt
转到Packages2文件夹下批量安装
pip install -r filenames.txt
方式②
pip install --no-index --ignore-installed --find- links=./packages -r requirements.txt
三、可能存在部分包在离线机器无法部署
针对无法部署的包手动搜索适合版本–ai智能问答搜索
1.在线下载好需要的安装包及其依赖至文件夹–采用清华镜像网站
示例
pip download paramiko-d ./offline_packages -i https://pypi.tuna.tsinghua.edu.cn/simple
或者手动搜索镜像网站whl包如https://mirrors.bfsu.edu.cn/pypi/web/simple/pip/,然后安装whl包
或者下载tar.gz文件,解压后通过python setup.py install安装
或者下载exe文件,双击安装…
2.将offline_packages传至离线机器,离线安装需要的包
(pip 无法响应时,可以使用 python -m pip install xxx。这样去确保 pip 安装在当前上下文的 python 里)
示例:
pip install --no-index --find-links=./offline_packages paramiko
四、使用pyinstaller将py文件打包为exe
针对特定的dll文件,如连接数据库的文件,打包到打包结果根目录
pyinstaller -F --add-binary "数据库dll文件位置\oci.dll;." --add-binary "数据库dll文件位置\oraocci11.dll;." --add-binary "数据库dll文件位置\oraociei11.dll;." xx.py
结束
五、遇到的坑
1.读取与写入文件脚本需要修改为动态路径
示例:
def read_table():
df = []
path = os.path.dirname(os.path.realpath(sys.argv[0]))
listdir = list_files_in_directory(path)
for i in listdir:
df.append(pd.read_excel(i, sheet_name='sheet_name', engine='openpyxl'))
return df
def list_files_in_directory(directory):
"""遍历指定路径下的所有文件"""
files = []
for root, dirs, filenames in os.walk(directory):
for filename in filenames:
files.append(os.path.join(root, filename))
return files
2.打包后读取文件总存在file is not a zip file错误,可能是离线机器内的文件加密的原因
3.离线迁移兼容pyinstaller的python虚拟环境
(1)使用conda-pack迁移的环境,原有模块无法使用,还是需要重新安装;
(2)使用conda 新建虚拟环境,会将base中存在的一些包带过来,还是无法使用;
(3)将虚拟文件夹直接copy,部分包仍无法正常使用,可能是路径依赖的问题;
(4)直接安装python客户端并使用python -m venv venv建虚拟环境,如果创建不成功试试使用管理员权限,然后利用requirements文件安装依赖包,成功复刻。
4.离线机器安装pysvn包
pip网址的whl文件无法满足使用需要,要去下载exe格式的包,双击安装总是装不到特定虚拟环境,尝试下载exe源码,采用python setup.py install安装,却报错了,后来我直接把文件夹放在了程序运行路径下面,就可以啦
1190

被折叠的 条评论
为什么被折叠?



