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安装,却报错了,后来我直接把文件夹放在了程序运行路径下面,就可以啦

### 如何离线迁移Python虚拟环境 #### 准备阶段 为了成功地在没有网络连接的情况下迁移Python虚拟环境中所需的包,可以先在一个有互联网访问权限的机器上创建导出这个环境。具体操作包括: 1. 创建一个新的虚拟环境激活它。 2. 安装所有必要的库到该环境中。 ```bash python3 -m venv my_env source my_env/bin/activate # Linux/MacOS 或者对于Windows使用 `my_env\Scripts\activate.bat` pip install numpy pandas matplotlib ... # 根据需求安装所需软件包 ``` #### 导出依赖关系列表 一旦所有的必需品都被正确安装到了源虚拟环境中,则可以通过`pip freeze`命令来获取当前环境下已安装的所有包及其版本号的信息,将其保存至文件中以便后续处理[^1]。 ```bash pip freeze > requirements.txt ``` #### 打包轮子(Wheels) 考虑到目标计算机可能无法直接从PyPI下载资源,在这里建议提前打包好这些第三方模块成为`.whl`格式的二进制分发文件。这一步骤同样适用于那些不容易编译通过或者依赖特定操作系统特性的扩展组件。 ```bash pip wheel --wheel-dir=./wheels -r requirements.txt ``` 此时将会把所有指定的要求转换成对应的.whl文件存放在本地目录下名为"wheels"的位置内。 #### 迁移过程 将上述准备好的两个重要部分——即requirements.txt以及整个包含.wheels的文件夹复制粘贴传输给另一台待部署的目标主机即可完成初步准备工作;值得注意的是如果两者的平台架构存在差异的话还需要额外注意兼容性问题。 #### 构建新环境 最后,在无网状态下于新的计算节点之上依据之前备份的数据重建相同的开发测试条件: 1. 解压或拷贝先前收集整理出来的资料; 2. 使用相同的方式建立空白venv实例; 3. 利用pip工具加载预先缓存下来的binary wheels来进行批量安装工作。 ```bash python3 -m venv new_my_env source new_my_env/bin/activate # 同样区分不同系统的启动方式 pip install --find-links=/path/to/wheels_folder -r /path/to/requirements.txt ``` 这样就能够在不联网的前提下顺利实现跨设备间的Python编程生态转移了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值