目录
因为安全原因,有些服务器是不允许访问外网的,所以我们没办法通过pip做在线安装,那么这种情况只能采用离线的方式。
第一种:通过pip离线安装
思路就是,先在有外网的服务器上,通过pip在线安装第三方包,注意:这里的系统和python版本要和离线服务器的一致,不然会出现各种版本不一致问题。
大体步骤如下:
先看下系统:
[root@plugins ~]# cat /proc/version
Linux version 3.10.0-1062.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Wed Aug 7 18:08:02 UTC 2019
然后安装python,我这里装的是pypy3:
(test) [root@plugins opt]# python
Python 3.7.13 (7e0ae751533460d5f89f3ac48ce366d8642d1db5, Mar 29 2022, 06:03:31)
[PyPy 7.3.9 with GCC 10.2.1 20210130 (Red Hat 10.2.1-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>>
强烈推荐创建一个python的虚拟环境,保持隔离性,会省去很多干扰,比如创建一个名为test的虚拟环境:
python3 -m venv test
然后激活这个虚拟环境:
source test/bin/activate
在这个虚拟环境里面,下载我们需要的包:
从私服下载指定的第三方包,-i用来指定下载源,--trusted-host必须有
pip download -i http://172.17.162.124:8081/repository/pypi-group/simple/ -d modules -r requirements.txt --trusted-host 172.17.162.124
下载源就是python包的仓库,外部的和私服都可以,-r requirements.txt 是我们需要下载哪些包,都可以在这里指定。
然后将下载的包,传到离线服务器,在离线服务器通过pip安装,强调离线服务器的系统和python版本一定和我们下载包的环境一致。
将下载好的包,传到服务器,通过以下命令本地安装,--find-links为包的本地路径
pip install --no-index --find-links=modules -r requirements.txt
正常情况下,如果没有错误的话,就是成功了,然后我在安装pandas的时候就失败了,因为是源包安装,未能成功构建,折腾了几天,换个思路,迁移虚拟环境。
第二种:迁移虚拟环境
我们在前面创建了虚拟环境test,其实就是个test目录,打包,整个传到离线服务器,但是不能直接使用,需要做以下修改:
1、修改test/bin/下activate文件中参数VIRTUAL_ENV,将其修改成离线服务器的完整路径:
VIRTUAL_ENV="/opt/test"
export VIRTUAL_ENV
就是test的路径。
2、修改bin下工具的python路径,将其修改成离线服务器python路径,如pip的,打开pip文件修改:
#!/opt/test/bin/pypy3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
修改第一行,其他工具类似。
3、检查虚拟环境中python可执行文件是否可用,如下:
主要是pypy3这个软连接,指向的改为本机的python路径,软连接的话,要修改,需要先删除:
rm pypy3
这里要小心,不要 rm pypy3/ 就是不要带"/",不然会把原始文件删掉。
然后创建软连接:
ln -s pypy3 /opt/pypy3.7-v7.3.9-linux64/bin/pypy3
基本上做到这里,就算是迁移完成了,可以跑python程序了。
========================================================
有的还需要修改sys.path,我这边目前暂未需要。