我有一个python软件包,在以方式启动时可以正常运行python -m myproject
。但是,当我启动as时nohup python -m myproject
,会得到一个ImportError
。此外,当我以启动时nohup python3 -m myproject
,它可以正常工作。
看来问题是mypython
别名为python3,而nohup以某种方式使用了非默认的python。为什么会这样呢?
您的外壳程序(可能是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;它不知道您的外壳别名。它将找到/usr/bin/python
并最终为您运行Python 2。
您可以阅读Shell手册,以了解启动时运行的文件(例如.bashrc之类的东西)。这将帮助您找出为什么外壳程序具有该Python 3别名的原因。查找类似以下内容的行:
alias python=python3
您可以阅读有关系统的软件包管理器的信息,以了解如何查看哪些文件属于哪些软件包,这可以帮助您确定为什么存在Python 2的符号链接。只需询问软件包管理器,便是拥有该/usr/bin/python
链接的软件包。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句