pythonはnohupで異なる動作をします


3

として起動したときに正常に実行されるpythonパッケージがありますpython -m myproject。ただし、として起動するとnohup python -m myproject、が表示されますImportError。さらに、として起動するとnohup python3 -m myproject、正常に動作します。

問題は、my pythonがpython3にエイリアスされているのに対し、nohupはデフォルト以外のpythonを使用していることです。これはなぜでしょうか?


シェルで次のコマンドを実行し、それらの出力を投稿できますか? which pythonおよびtype python
デビッドグレイソン

@DavidGrayson python/usr/bin/pythontoのエイリアスです/usr/bin/python3
エリクソン

どういう意味かわかりません。上記のコマンドの出力とは何readlink /usr/bin/pythonですか?使用しているLinux / Unixディストリビューションと、ディストリビューションパッケージマネージャーを使用してPythonをインストールしましたか?
デビッドグレイソン

タイプpython >> pythonは `/ usr / bin / python3 'にエイリアスされます。which python >> / usr / bin / python; readlink / usr / bin / python >> python2.7; タイプpythonとpythonのタイプが異なる方向を指しているという事実は、私にとって非常に奇妙です!
エリクソンラ

回答:


2

あなたのシェル(おそらくbashは)あなたが入力したときになるように割り当てられている別名があるpythonコマンドの最初に、それはにそれを変更します/usr/bin/python3。あなたがそのエイリアスを持っている理由を言うのは難しいです。システム管理者が、すべての人にデフォルトでPython 2ではなくPython 3を使用することを望んでいる可能性がありますが、これはそれを達成するための試みでした。

あなた/usr/bin/pythonはPython 2バイナリへのシンボリックリンクです。これはかなり普通のようです。pythonPython 3はまだ人気がないため、多くのLinuxディストリビューション(Debianなど)でPython 2を参照するのが一般的です。ただし、常にそうとは限りません。Arch Linuxでは、pythonPython 3を指します。

したがって、推測する必要がある場合、システムのパッケージマネージャーはシンボリックリンクをからインストールし/usr/bin/pythonました。/usr/bin/python2.7これは、ポリシーがデフォルトでPython 2を使用するためのものであるためです。しかし、システムを構成する際に何らかの発言権を持っていた誰かが、デフォルトでPython 3を使用することを決定したため、このエイリアスをインストールしました。

ご覧のとおり、エイリアスは常に機能するとは限りません。を入力するnohup pythonと、シェルはエイリアスを展開せ、代わりに文字列pythonを引数としてnohupコマンドに渡します。次に、nohupコマンドは何をpython意味するのかを理解する必要があり、それはすべてPATHを調べるだけです。シェルのエイリアスについては知りません。/usr/bin/pythonPython 2を見つけて実行します。

シェルのマニュアルを読むと、起動時に実行されるファイルを見つけることができます(例:.bashrcなど)。これは、シェルにPython 3のエイリアスがある理由を見つけるのに役立ちます。次のような行を探します。

alias python=python3

システムのパッケージマネージャーについて読んで、どのファイルがどのパッケージに属しているかを調べる方法を理解することができます。これは、Python 2のシンボリックリンクがある理由を理解するのに役立ちます/usr/bin/python


1
徹底的な説明をありがとう!私自身alias python=python3も、それが/usr/bin/pythonpython3へのリンクになることを期待して設定しました。私が自分のシステムの脅威であることを証明し、PEP394を発見したので、おそらく元の状態にリセットします。
エリクソンラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.