2017-03-15 25 views
-1

私はipythonの中から機能するスクリプトを持っていますが、コマンドラインから同じスクリプトを実行すると、インポートしようとしているローカルモジュールのインポートエラーが発生します。スクリプトはipythonで動作しますが、コマンドラインからは動作しません

from helper_functions.email_from_server import send_email 

エラー: はImportError:Ipython内からこのスクリプトの輸入は問題なく

をhelper_functions.email_from_serverという名前のモジュール。私は同じスクリプトを実行することができ、コマンドラインから 実行script.py

比較してみると、私はコマンドを使用して別のスクリプトを実行することができますipython内の任意の問題もなく実行されるコードを持って のpython/DIR/script.py

しかし、このpython /dir/script.pyは(上記の)ローカルインポートのスクリプトでは動作しません。pythonpathの問題かローカルなenvの問題かどうかは分かりません。私はそれを見つけるためにスタックを介して読んでいるが、これまでできなかった。

EDIT(明確にするのに役立つ)/dir/script.py PYTHONPATH = /ディレクトリ/パイソン:それは、その角を曲がったところに

一つの試みまし解決策のように感じている 私はLinux上でアナコンダの分布を使用しています機械。

+0

おそらくipythonは他のpython実行可能ファイルを使用しています。だから、あなたはanacondaをインストールしてipythonを使っていたかもしれませんが、cmdはいくつかのvanilla-python distを呼び出します。しかし、あなたの質問をもう一度読んで、十分な情報を提供しているかどうかを確認してくださいあなたはあなたが使用しているOSを教えてくれませんでした。 – sascha

+0

スクリプトとエラーメッセージが表示されますか?あなたが見ていることを知らないと誰も助けることが非常に難しいでしょう –

+0

@サスカ - コメントありがとう - – SteelyDanish

答えて

0

ラッパーシェルスクリプトを作成して解決しました。私はPythonのパスを毎回エクスポートしているが、それはうまくいきます。

#!/bin/bash 
export PYTHONPATH="${PYTHONPATH}:/my/dir" 
source ~/.bash_profile 
cd /my/dir && my/anaconda/location/bin/python /my/dir/to/script/cript.py 
1

PYTHONPATHで悩むことは悲しみのレシピです。あなたはできますそれを行うが、しないでください。正しいことは、あなたのパッケージをあなたの正しい環境にインストールすることです。パッケージhere's a super simple exampleの作成方法がわからない場合。 ipythonとコマンドラインを使用して実行している場合は、パスに多少の違いがあるかもしれません。

あなたは違いがsys.executablesys.pathを使用しているかを調べることができます:IPythonから、その後、あなたのコマンドラインでpythonからそれを実行

import sys 
print(sys.executable) 
print(sys.path) 

実行]を。間違いなく2つの異なる結果が得られます。 Anacondaを実行しているので、構築するものをインストールするために非condaパッケージをインストールする場合は、follow their guideにします。

もちろん、あなたのパスにanacondaのpythonがあることを前提としていますが、あなたはLinux上にいるので、which pythonで確認できます。

+0

Thanks Wayne - sys.executableはipythonとpythonの両方で同じです。私はそれをパッケージとして構築していません - それは多分問題の一部です。可能であれば、パッケージを構築することなくスクリプトを実行したいと考えていました。 – SteelyDanish

+0

パッケージを作る場合は、パッケージを作る必要があります。それ以外の場合は、大きなファイルを持ち、小さな関数とクラスに分けて、それを実行するだけです。これは、コードを再利用しないことを前提としています。あなたが再利用のためにコードを書いているのであれば、あなたはパッケージを作成しようとしています。私はパスについての私の答えに追加しました。もし 'sys.path'が同じなら、何かがかなり変です。 –

+0

ありがとう@Wayne Werner私はsys.pathを調べました。そして、私のpython sysパスには、余分なパス(anaconda/binの場所)があります。この行を - >/home/anaconda2/bin/python /project_folder/script.pyに置くと、sysパスが適切にインポートされます - それが私が想定しているものです。私は質問を書き直そうとしました。 (http://stackoverflow.com/questions/42823059/crontab-issues-with-python-script) – SteelyDanish

関連する問題