威联通 qnap 使用 Python3

前言

我发现在威联通上面使用 Python3 还挺麻烦的。即使我已经在 App Center 里面安装好了,但是当我通过 ssh 连接威联通 nas 时,却发现找不到 Python3,Python2 倒是可以找到。

qnap-Python3

[~] # python3
-sh: python3: command not found
[~] # python
Python 2.7.13 (default, Mar 24 2022, 10:03:40)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

那问题来了。

安装好的 Python3 在哪里呢?

答:在 /share/CACHEDEV1_DATA/.qpkg/Python3

[/share/CACHEDEV1_DATA/.qpkg/Python3] # ls
python3/ python3.bash Python3.sh* README.md src/

那要如何使用它呢?

通过查看 README.md 的内容,我们可以看到这些内容

# cat README.md
Run the following command to enter Python3 environment:

```
$ . /etc/profile.d/python3.bash
```

也就是说,我们需要在 shell 里执行一下

. /etc/profile.d/python3.bash

这条命令,才可以进入 Python3 环境(注意 . 之后有一个空格)

[/share/CACHEDEV1_DATA/.qpkg/Python3] # . /etc/profile.d/python3.bash
[/share/CACHEDEV1_DATA/.qpkg/Python3] # python3
Python 3.10.4 (main, May 6 2022, 08:22:01) [GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

进阶了解

其实这里的 . 也可以换为 source,它们是等价的。

[~] # python3
-sh: python3: command not found
[~] # source /etc/profile.d/python3.bash
[~] # python3
Python 3.10.4 (main, May 6 2022, 08:22:01) [GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

而且我们可以发现,/etc/profile.d/python3.bash 其实是 /share/CACHEDEV1_DATA/.qpkg/Python3/python3.bash 符号链接(Symbolic Link)。

# ls -alh /etc/profile.d/python3.bash
lrwxrwxrwx 1 powersee administrators 48 2023-05-04 07:15 /etc/profile.d/python3.bash -> /share/CACHEDEV1_DATA/.qpkg/Python3/python3.bash

看看 python3.bash 里面的内容

# cat python3.bash
_PYTHON3_QPKG_CONF=/etc/config/qpkg.conf
_PYTHON3_QPKG_NAME="Python3"
_PYTHON3_QPKG_ROOT=$(/sbin/getcfg $_PYTHON3_QPKG_NAME Install_Path -f ${_PYTHON3_QPKG_CONF})
_PYTHON3_QPKG_BIN="${_PYTHON3_QPKG_ROOT}/python3/bin"
echo "${PATH}" | grep -q ${_PYTHON3_QPKG_BIN} || export PATH=${_PYTHON3_QPKG_BIN}:${PATH}

我尝试过将 source /etc/profile.d/python3.bash 这条命令,添加到 .bash_profile 里面,但是重新进行 ssh 连接,发现没有效果,并不能直接执行 python3 来进入交互界面。

之后我发现默认使用的是 /bin/sh,但是我执行 bash 之后,发现依然是 /bin/sh

[admin@qnap test]# echo $SHELL
/bin/sh

之后我发现,里面的 bash 其实 sh 的符号链接……

# ls -al /bin/bash
lrwxrwxrwx 1 admin administrators 2 2023-05-04 15:09 /bin/bash -> sh*

所以我应该把命令添加到 ~/.profile 里面才对。之后再次 ssh 就可以直接使用 Python3 了。