如何保持一个干净的系统


Table of Contents

由于工作需要经常会使用多种语言, 比如 python, golang, lua, javascript等, 各种语言都有自己的包管理器,像python的包管理器pip, lua的包管理器luarocks。。。

每个包管理器安装package的方式,位置都不相同,对于一个有洁癖的人来说,

ls ~/ -al

后各种各样的.something简直是场灾难, 所以保持一个干净的系统是非常必要的, 比如把相关语言的package都放到一个目录(我选择放到$HOME/repo/{language})下

请不要使用root用户,或者sudo来安装非必要的软件包

python

我的python环境是pip+virtualenv+virtualenvwrapper, pip可以有多种使用方式:

  • sudo

    sudo安装的package放到/usr/lib64/python-{verison}目录下, 这可能会与系统的包管理器所安装的python package冲突, 比如docker可以使用

    sudo pacman -S docker
    

    也可以使用

    sudo pip install docker
    

    但更新系统包时可能有冲突导致无法更新

  • --user(-U)

    使用本地安装,不需要sudo权限, 安装的package会放到$HOME/.local目录下

  • virtualenv

    python的各种依赖包环境分离靠的就是virtualenv, 它会把安装的package放到$WORKON_HOME这个环境变量下, 我平时也主要使用这个,但一些常用的package, 像http,docker-compose,pelican等, 我不想在使用时还得

    workon {virtualenv name}
    

    然后才能使用, 太麻烦

最有效的方法是搭配--uservirtualenv

  1. 设置--user的安装目录
    export PYTHONUSERBASE=$HOME/repo/python
    
  2. 设置virtualenv的安装目录
    export WORKON_HOME=$HOME/repo/python/virtualenv
    source $HOME/repo/python/bin/virtualenvwrapper.sh
    
  3. 设置PATH变量
    export PATH=$PATH:$HOME/repo/python/bin
    

然后无论是pip install package --user还是mkvirtualenvpip install package, 所安装的package都会放到$HOME/repo/python目录下

golang

与python同理

  1. 设置GOPATH变量
    export GOPATH=$HOME/repo/golang
    
  2. 设置PATH变量
    export PATH=$PATH:$HOME/repo/python/bin:$HOME/repo/golang/bin
    

lua

  1. 设置luarocks安装默认参数
    alias luarocks='luarocks --tree=$HOME/repo/lua'
    
  2. 设置LUA_PATHLUA_CPATH变量
    export LUA_PATH="$HOME/repo/lua/share/lua/5.3/?.lua;$HOME/repo/lua/share/lua/5.3/?/init.lua;$LUA_PATH;"
    export LUA_CPATH="$HOME/repo/lua/lib/lua/5.3/?.so;$LUA_CPATH;"
    
  3. 设置PATH变量
    export PATH=$PATH:$HOME/repo/python/bin:$HOME/repo/golang/bin:$HOME/repo/lua/bin
    

javascript

  1. 设置NODE_PATH变量
    export NODE_PATH=$HOME/repo/npm
    
  2. 设置PATH变量
    export PATH=$PATH:$HOME/repo/python/bin:$HOME/repo/golang/bin:$HOME/repo/lua/bin:$HOME/repo/npm/.bin
    

最后, 把相关代码放到$HOME/.bashrc中, 就可以享受一个相对干净的系统了

There are comments.