Zodiac Wang
  • Home
  • Categories
  • Tags
  • Archives

Ubuntu与Python环境已安装软件包备份与重装

重装系统真的是件麻烦事!尤其是当你需要重装一系列之前使用的程序/软件包的时候。

由于本人主要使用 Anaconda 环境以及 Python 语言编程,本文简单记录一下 Ubuntu 下通过 apt 安装的 package,以及 Anaconda Python 环境中 package 的备份方法。

Table of Contents

  • 1  Ubuntu 软件包备份
    • 1.1  安装apt-clone
    • 1.2  备份
    • 1.3  恢复安装
  • 2  Anaconda 环境中的Python包备份
    • 2.1  原生pip备份
      • 2.1.1  pip freeze 和 pip list 的区别
      • 2.1.2  pipdeptree 依赖分析工具
    • 2.2  conda备份

Ubuntu 软件包备份¶

使用 apt-clone 包就能备份系统上已安装软件列表

安装apt-clone¶

sudo apt install apt-clone

备份¶

新建个文件夹保存备份文件,之后直接开始备份就好了

mkdir ~/mypackages
sudo apt-clone clone ~/mypackages

not installable: sogoupinyin, atom, lantern version mismatch: libwebkit2gtk-4.0-37, unattended-upgrades, liblouis-data, firefox-locale-en, ubuntu-release-upgrader-core, ubuntu-release-upgrader-gtk, gir1.2-webkit2-4.0, update-manager-core, firefox-locale-zh-hans, python3-louis, update-manager, python3-distupgrade, libjavascriptcoregtk-4.0-18, gir1.2-javascriptcoregtk-4.0, python3-update-manager, firefox, liblouis14

Note that you can use --with-dpkg-repack to include those packges in the clone file.

~/mypackages文件夹下应该有一个名为apt-clone-state-ubuntu.tar.gz压缩包

cd ~/mypackages
tar -xvf apt-clone-state-ubuntu.tar.gz

解压之后文件夹结构大概如下

.
├── etc
│   └── apt
│       ├── preferences.d
│       ├── sources.list
│       ├── sources.list.d
│       │   ├── google-chrome.list
│       │   ├── notepadqq-team-ubuntu-notepadqq-bionic.list
│       │   ├── numix-ubuntu-ppa-bionic.list
│       │   ├── sogoupinyin.list
│       │   ├── vscode.list
│       │   └── webupd8team-ubuntu-atom-bionic.list
│       ├── trusted.gpg
│       └── trusted.gpg.d
│           ├── microsoft.gpg
│           ├── notepadqq-team_ubuntu_notepadqq.gpg
│           ├── numix_ubuntu_ppa.gpg
│           ├── sogou-archive-keyring.gpg -> /usr/share/keyrings/sogou-archive-keyring.gpg
│           ├── ubuntu-keyring-2012-archive.gpg
│           ├── ubuntu-keyring-2012-cdimage.gpg
│           └── webupd8team_ubuntu_atom.gpg
└── var
    └── lib
        └── apt-clone
            ├── extended_states
            ├── foreign.pkgs
            ├── installed.pkgs
            └── uname

8 directories, 19 files

其中 var/lib/apt-clone/installed.pkgs 记录已安装的包,另外 apt-clone 还会备份软件源等其他一些设置。

恢复安装¶

apt-clone info mypackages/apt-clone-state-ubuntu.tar.gz # 查看备份包信息

使用如下命令在新系统中恢复安装备份的软件包

sudo apt-clone restore apt-clone-state-ubuntu.tar.gz

References:

  • Backup Installed Packages And Restore Them On Freshly Installed Ubuntu System

Anaconda 环境中的Python包备份¶

原生pip备份¶

freeze命令

pip freeze > ~/mypackages/requirements.txt

requirements.txt文件长这个样子

alabaster==0.7.11
anaconda-client==1.7.2
anaconda-navigator==1.9.2
anaconda-project==0.8.2
appdirs==1.4.3
asn1crypto==0.24.0
astroid==2.0.4
astropy==3.0.4
atomicwrites==1.2.1
attrs==18.2.0
Automat==0.7.0
autopep8==1.4
Babel==2.6.0

内容包括版本信息,似乎没有找到不输出版本号备份包名的方法,安装时似乎也没有忽略版本号的方法,如果想安装相应包的最新版本,可以在安装完成后再升级一遍。

再次安装时只需

pip install -r requirements.txt

上述命令会在将所有安装文件下载完毕后统一安装,因此一旦某个 package 出错就可能导致其他 package 也无法安装。

可以使用以下命令分别安装每个 package

cat requirements.txt | xargs -n1 pip install

也可以在安装软件时保存 cache 方便以后安装

pip install -r requirements.txt -d your_download_dir
pip install -r requirements.txt --no-index --find-links=file://your_download_dir

类似的 pip list 也可以输出所有包,但和 freeze 还是有一定区别的。

pip freeze 和 pip list 的区别¶

1.一般来说 pip freeze 会比 pip list 的包少几个,因为pip , wheel , setuptools 等包,是自带的而无法(un)install的,考虑到pip freeze的用途,所以这些包并没有显示。

如果一定要显示所有包,可以加上参数-all,即pip freeze -all

2.格式区别

pip freeze 出的格式可以直接作为 requirements.txt 文件使用,而 pip list 输出格式大致如下

Package                            Version    
---------------------------------- -----------
alabaster                          0.7.12     
anaconda-client                    1.7.2      
anaconda-navigator                 1.9.2      
anaconda-project                   0.8.2      
appdirs                            1.4.3      
asn1crypto                         0.24.0     
astroid                            2.0.4      
astropy                            3.0.4

无法直接作为 requirements.txt 文件使用。

pipdeptree 依赖分析工具¶

使用 pipdeptree 可以分析当前 Python 环境中所有 package 之间的依赖关系

pip install pipdeptree

pipdeptree # 分析依赖关系
pipdeptree --reverse --packages xxx # 某个 package 为何被安装

conda备份¶

conda list --export > mypackages/package-list.txt # 导出pkg列表

conda create -n myenv --file package-list.txt # 依列表创建新环境

myenv 为环境名,package-list.txt为之前备份的pkg列表

使用--offline选项禁用不必要的下载,而是从root或其他环境中复制可复用的包

注:conda 备份文件用于恢复时,对通过 pip 安装的 package 不太友好


  • « Ubuntu下搭建深度学习环境(CUDA-cuDNN-TensorFlow)
  • 魔方 »

Published

10 4, 2018

Category

posts

Tags

  • Anaconda 1
  • Python 16
  • Ubuntu 4

Contact

  • Zodiac Wang - A Fantastic Learner
  • Powered by Pelican. Theme: Elegant