离线部署Django工程项目迁移到无网络环境

已有环境

  • CentOS 6
  • Python 3
  • Django 1.11

主要用到下面三个命令:

# 导出依赖
pip freeze > requirements.txt  
# 按照依赖下载离线包
 pip download -d packagesDir -r requirements.txt     
# 安装离线包
whl包、tgz包
单个包、目录下的包
pip install --no-index --find-links="packages_dir" -r requirements.txt

提前准备

(1)requirements.txt 依赖文件 pip freeeze > requirements.txt

(2)离线包下载(有坑)
下载命令: pip download -d /dir/of/packagesDir -r requirements.txt

注意,下面2条很是关键!!!!

  1. 一定要注意平台,windows离线下载的离线包只适用于windows,macOS、Linux同理。
  2. CentOS 6 和CentOS 7的也不一样。前者下载的离线包也不适用后者,不然离线安装的时候会报错。

上面两点对应上后,再下载离线包,然后转移到内网机器上。

离线主机安装Python3

因为系统自带的是Python2.6,但是要安装Python3适用,而且不能覆盖安装Python2.

已经测试过,安装Python3 然后适用命令 python3 manage.py runserver, 会出现一系列问题。 因此采用 pyenv工具安装不同的Python解释器,这里安装Python3.。

此处跳开 pyenv 的安装步骤, 假定已经使用 pyenv安装上 Python3.

安装离线包

离线包所在目录: offlinePackages
安装命令:pip install --no-index --find-links="offlinePackages" -r requirements.txt

就完成了项目需要的离线包安装,接下来可以正常使用类似django-admin的命令了。
最后,需要修改django的配置文件等,数据库密码主机ip等。


其它

  • 尝试过将venv虚拟目录一通打包,然后 source /venv/bin/active 但是不管用,还是上述方法解决了问题。
  • 一定要有一个Python解释器存在,不然虚拟目录激活后也用不成。

附:离线安装pyenv方法

有网的主机上先下载

1、 使用这条命令主要是偷懒,方便好用: curl https://pyenv.sh | bash, 该步骤得到 .pyenv 目录,也就是pyenv工具的目录,后续需要打包该目录,并转移到无网主机上。

2、还是有网主机上,写入pyenv的环境变量:

    $ echo 'export PYENV_ROOT="$HOME/.pyenv"'>> ~/.bashrc     #然后需要修改环境变量,使用 Bash Shell 的输入
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"'>> ~/.bashrc
    $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

3、安装想要的Python版本,比如3.6.5

 pyenv install 3.6.5

如果报错,那就是一些系统级别的依赖没有安装好,可以试试下面这些(其实是安装Python的依赖):

yum -y install zlib zlib-devel
yum -y install bzip2 bzip2-devel
yum -y install ncurses ncurses-devel
yum -y install readline readline-devel
yum -y install openssl openssl-devel
yum -y install openssl-static
yum -y install xz lzma xz-devel
yum -y install sqlite sqlite-devel
yum -y install gdbm gdbm-devel
yum -y install tk tk-devel
yum -y install gcc

4、 安装成功后, 打包pyenv 的目录: tar -czf pyenv.tgz .pyenv ,然后上传到无网主机上安装。注意配好pyenv环境变量。

( 写到这里,我发现可以使用另外一个思路来离线安装:在pyenv安装好后,直接切换到你想要的Python版本,此时pip也对应切换,这时使用pip直接安装 requiremans.txt里面的包,因为这些包都是安装在.pyenv目录下的的。然后直接打包上传到无网机器安装。 不过这样的缺点是:事先安装的包是全局性的,如果后续还安装新的、别的版本的包,会导致混乱,所以得确保当前pyenv是使用固定的包版本情况下。

无后患的做法是:
1、使用pyenv切换Python版本;
2、创建虚拟目录;
3、激活虚拟目录;
4、安装离线包——这个时候,离线包才是安装到了隔离开的环境里面,也是局部性的包。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章