这个问题之前也遇到过,但是一直都没有深究。今天又遇到了。我先讲讲故事的来龙去脉。
来龙去脉
我要用自己的服务器创建django项目,发现python运行sqlite3有问题。而我的另一个伙伴已经安装了python3在他自己的目录下,他去他的目录下一看,他的可以运行。而我的不能运行。我用which 查看了一下python3, python3.6 发现我们两个人对应的目录并不一样。 他的python3指到了他自己的目录下,而我的指到了/usr/local/bin/python下, 就不是一个python. 先说一下,
这种情况下,如果我要使用他目录下的python, 除了切换root或者他的用户,我没有别的方法可以解决。
我尝试把我目录的python3的路径指到他的目录下,发现我没有权限,如果使用root强行指过去,还是没有权限。因为我没有进入他的用户目录的权限。他是强制配了环境变量,把python的路径指到了自己的目录下, 所以问题来了,应该怎么安装软件才能让大家使用呢?
需要注意的是/usr/local/bin/* /bin/* 这些目录是所有用户都可以访问的。
那么,当我们编译安装软件的时候,就需要保证软件是安装在所有用户都可以读取的目录下。不一定是/usr/local/下,但是这个目录一定是其他用户也可以访问的。因为/usr/local/bin/python 和/bin/python 这些只是软链接而已。指向的地方如果不能进入,没有权限。那就只能某个人或者root才能使用。这就不太好了。当然这里可能要加环境变量,比如/etc/bashrc里面加上
export PATH=/usr/local/bin:$PATH
然后source /etc/bashrc 即可。
最正确的非root用户源码安装软件的步骤
1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码。
2. 解压源代码,一般使用tar -zxvf xxx.tar.gz即可
3. 切换到解压后的目录,运行 ./configure。其选项可以通过 ./configure –help来获取,非root用户下最重要的应该是定义安装目录,即应该定义 ./configure –prefix=/path/to/bin, 对于一些依赖库,可能还需要使用 ./configure –prefix=xxx –with-xx-dir=xxx这种形式。(注意,./configure --prefix=/path/to/bin是必须得指定的,它决定了安装的位置,安装不好就会出现上面的问题)
4. 接着是编译源代码和安装软件: make && make install。这两条命令可以分开来用,因为编译的时候可以指定参数 -j来并行编译,这样能够加快编译进度。。
5. 更新path路径。使用export PATH=/path/to/bin:$PATH,这句话在shell窗口运行只在本次会话中有效,可以将其写到.bashrc或者.bash_profile里面使其对当前用户有效。
6.如果安装的是动态链接库,则需要更新动态链接库路径: export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH,同样是export命令,最好将其写在.bashrc这类文件下面以便登陆的时候自动调用。
再次划重点:
./configure --prefix=/path/to/bin 这里的–prefix=/path/to/bin是必须得指定的,除非你解压到了一个其他用户都可以访问的目录。
最终结果
我重新进行了python的安装,安装之后大家就都可以访问了^_^
参考:
https://blog.csdn.net/LIYUAN123ZHOUHUI/article/details/72781443