虚拟环境是直接用 python 自带的 venv 命令装的
无网环境,已知虚拟环境 1 有我需要的包 A,虚拟环境 2 没有,那能不能直接从虚拟环境 1 的文件夹里找到包 A 对应的文件拷贝到虚拟环境 2 中呢,如果可以的话需要拷贝哪些文件?
另,如果所需的新虚拟环境 python 包跟已有的虚拟环境 1 一模一样,在不共用一个虚拟环境的前提下,我是否能将虚拟环境 1 直接拷贝到我想要的路径,并且更改虚拟环境文件夹的名字?或者需要做哪些改动才能达到我想要的效果?
网上找的一般都是用 requirements.txt 和 pip install,但我现在遇到无网的情况,望指点
感谢
1
yuanxing008 2020-12-24 11:06:11 +08:00
pip install 也不是说一定要网络的 可以装本地包的
|
2
614457662 2020-12-24 11:07:56 +08:00 via Android 1
复用原来的环境有什么问题吗?既然是无网环境,你代码怎么上去的时候,把你需要的 whl 文件和代码一起带上去,就离线安装也可以。
|
3
0ZXYDDu796nVCFxq 2020-12-24 11:10:15 +08:00 1
1. 复制 venv/lib/python<version>/site-packages/<package_name>
2. 同一个发行版可以的 |
4
IVeverKB OP @yuanxing008 #1
@614457662 #2 本地包是指 whl 离线安装包吗,其实也不是不可以但导入导出要申请过程麻烦。所以现在问是否在不用离线安装包的情况下,就是使用原有虚拟环境文件夹的资源就可以复用一下想要的包,一定程度上简化一下程序吧。 |
5
YouLMAO 2020-12-24 11:14:51 +08:00 via Android
Conda 大师来了
|
6
xia0pia0 2020-12-24 11:15:20 +08:00 1
默认是在 site-package 下面,其实 Python 找包就是从 sys.path 去找的, 虚拟环境 1:python shell> import sys print(sys.path)
|
8
frostming 2020-12-24 12:05:30 +08:00 1
亲可以离线安装的,首先把你所有的依赖都生成到 requirements.txt 中
1. 在联网的机器中:pip download -r requirements.txt -d packages 2. 把 requirements.txt 以及 packages 目录整个传到另一个无网的机器上 3. 在无网机器上创建好虚拟环境,然后 pip install -r requirements.txt -f packages |
9
ClericPy 2020-12-24 21:34:16 +08:00
最近也做这种多机发布的活, 现在用自带 zipapp 打包 pyz 那个协议, 发布时候就是推到多个机器一起挂载的那个 nas 上, 运行就直接 python3 xxx.pyz abc.py. 没有 .so / .pyd 那种动态依赖的情况下, 单个 zip 文件发布和运行都很方便, 就算有也没事, 解压就能使了
目前没发现大问题. 打包 pyz 之前用的 shiv, 现在在自己写. 总之 zip 文件里其实放的就是一堆 pip 下下来的包或者自己添加进去的依赖, 只要注意一下编译相关的冲突就好了, 比如跨平台(Linux 编译的没法在 win 上)或者跨 python 版本(3.7 和 3.8 有时候都因为编译器不一致出问题) |