python 使用 nohup 的运行方式不同

python 使用 nohup 的运行方式不同

我有一个 python 包,当我以 启动时,它可以正常运行。python -m myproject但是,当我以 启动时nohup python -m myproject,我得到一个ImportError。此外,当我以 启动时nohup python3 -m myproject,它可以正常工作。

问题似乎是我的python别名为 python3,而 nohup 不知何故使用了非默认的 python。为什么会这样?

答案1

你的(可能是 bash)分配了一个别名,这样每当您python在命令开头输入时,它都会将其更改为/usr/bin/python3。我很难说你为什么有这个别名。可能是你的系统管理员希望每个人都默认使用 Python 3 而不是 Python 2,而这是实现这一目标的尝试。

您的/usr/bin/python是指向 Python 2 二进制文件的符号链接。这似乎很正常;在很多 Linux 发行版(例如 Debian)中,python引用 Python 2 是很常见的,因为 Python 3 还不够流行。但情况并非总是如此;在 Arch Linux 上,python引用的是 Python 3。

因此,如果让我猜的话,我会说您系统的包管理器安装了从/usr/bin/python到的符号链接/usr/bin/python2.7,因为它的策略是让大家默认使用 Python 2。但是,在配置您的系统时有发言权的其他人决定他们希望默认使用 Python 3,因此他们安装了这个别名。

如您所见,别名并不总是有效。当您输入时nohup python,shell 会不是展开你的别名,而只是将字符串python作为参数传递给nohup命令。nohup然后命令必须弄清楚这python意味着什么,它所做的就是查看你的 PATH;它不知道你的 shell 别名。它会找到/usr/bin/python并最终为你运行 Python 2。

您可以阅读 shell 手册,了解它在启动时运行哪些文件(例如 .bashrc 等)。这将帮助您找出 shell 为何有 Python 3 的别名。查找如下行:

alias python=python3

您可以阅读有关系统的包管理器的信息,以了解如何查看哪些文件属于哪些包,这可以帮助您弄清楚为什么 Python 2 有一个符号链接。只需询问包管理器哪个包拥有该/usr/bin/python链接。

答案2

这意味着你在 python2 中安装了 lib,而不是在 python3 中。如果你安装了类似的包 sudo pip 安装然后默认安装在python2中,但是如果你安装sudo pip3 安装然后它安装在 python3 中

您可以像 python3.6 一样使用 pip3.6。

相关内容