2017-01-28 5 views
0

私はsudoコマンドでいくつかのpythonコードを実行しようとしていますが、私がそれを行うたびに、それは私にインポートエラーを与えます。しかし、もし私が端末でimport numpyを実行するとエラーは出ません。また、いくつかのImportsでコードを構築してからsudoコマンドを実行しないで実行すると、エラーは発生せず、コードは完璧に実行されます。私は既にsudoersフォルダにDefault env_keep += "PYTHONPATH"を追加しています。問題はそうです。私はAnaconda3をインストールしたので、有用な情報でしょうか?Pythonアプリケーションを実行しているときにsudoでのみImportError?

私はGNOME Ubuntu 16.04.1 LTSを実行しています。カーネルバージョン4.4.0-59-ジェネリック。

申し訳ありませんが、私はこれで非常に新しいですが、私は学んでいます。

私はwhich pythonを実行した後、sudo which pythonを実行し、私に別のディレクトリを与えました。

sudo which pythonは私にusr/bin/pythonwhich pythonを与えた私はsudo ./anaconda3/envs/ml/bin/python doc.pyを実行しようとしたが、今ではそれがファイルを見つけることができないと言う私にhome/user/anaconda3/bin/python

を与えました。

私はdockerが機能するための許可を必要とするので、私はsudoでそれを実行していますよ。

EDIT:sudoの代わりにsudo -Eを実行すると、同じエラーが発生します。実行ファイルを見るとき

+0

'sudo'を' sudo -E'に置き換えてみてください –

答えて

2

あなたは持っている問題はsudoないを行うことである通常のPATH順に従ってください:それは最初システムディレクトリを検索します。これはman sudoで書かれている:

セキュリティは、外部コマンドを実行するときに安全であるとしようsudo を指摘しています。 (一方または両方がPATHである場合) ユーザPATHにコマンドを検索するときに最後、コマンドスプーフィングを防ぐsudoチェック"."""(両方カレントディレクトリを示す)する

。実際PATH環境変数が変更されていないとsudoが実行するプログラムを変更せず を通過していること、しかし、注意してください。

だから、あなたがsudoに与えるコマンドは、システムの実行可能ファイルを一致させることができないことを確認する必要があり、この、すなわち絶対パスを指定して修正する:動作するはず

sudo /home/user/anaconda3/bin/python 

を一般的なコマンドは、次のとおりです。

sudo "$(which python)" 

which pythonsudoに実行されるためです、その出力は0に引数として渡されます。ただし、デフォルトでsudoは、任意の「殻様」のセットアップを実行していない、とあなたはsudoが手つかずの環境を渡す作成し、適切なシェルの設定を行うには-Eまたは-iのフラグを使用して検討することができるので、環境を制限することができます。

+0

私はこれを試しました。私はPythonアプリケーションを/ home/user/anaconda3/bin /ディレクトリに変更し、端末には sudo/home/user/anaconda3/bin/python mlcode.py コードを実行しました。 ここにそのようなファイルやディレクトリはないと言われています。 –

+0

@AaronGonzalezまあ、あなたは正しいパスを使用する必要があります。私はちょうどあなたが貼り付けたものをコピーしました、それが間違っているなら、私はそれについて何もできません。 – Bakuriu

+0

私はそれを理解しました。しかし、今、それは '__main__'モジュールを見つけることができないと言います。 –

関連する問題