我有一个 python 包,当我作为python -m myproject. 但是,当我作为 启动时nohup python -m myproject,我得到一个ImportError. 此外,当我作为 启动时nohup python3 -m myproject,它可以正常工作。
问题似乎是我python的别名为 python3 而 nohup 以某种方式使用非默认 python。为什么会这样?
小智 5
您的shell(可能是 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/pythonto的符号链接,/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
Run Code Online (Sandbox Code Playgroud)
您可以阅读有关系统的包管理器以了解如何查看哪些文件属于哪些包,这可以帮助您找出 Python 2 存在符号链接的原因。只需询问包管理器哪个包拥有该/usr/bin/python链接即可。
| 归档时间: |
|
| 查看次数: |
5230 次 |
| 最近记录: |