2017-09-21 13 views
0

これまで私が自分のカスタムパッケージをPythonで使用/インポートするためには、自分の.bash_profileを編集して、$ PATH環境変数に追加する必要がありました。モジュールをPythonの検索パスにする

>> echo $PATH 
/Users/MYNAME/google-cloud-sdk/bin:/Users/MYNAME/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Users/MYNAME/Documents/Python_Programs/MYPACKAGE1:/Users/MYNAME/Documents/GitRepos/MYPACKAGE2 

私のパス変数MYPACKAGE1とMYPACKAGE2が含まれています。 前者は文字通り単なる.pyファイルが入ったフォルダです。後者は、従来のパッケージフォルダ構造に従う。

>> import sys 
>> sys.path 
['', 
'/Users/MYNAME/anaconda/bin', 
'/Users/MYNAME/anaconda/lib/python36.zip', 
'/Users/MYNAME/anaconda/lib/python3.6', 
'/Users/MYNAME/anaconda/lib/python3.6/lib-dynload', 
'/Users/MYNAME/anaconda/lib/python3.6/site-packages', 
'/Users/MYNAME/Documents/Python_Programs/MYPACKAGE1', 
'/Users/MYNAME/Documents/GitRepos/MYPACKAGE2', 
'/Users/MYNAME/anaconda/lib/python3.6/site-packages/Sphinx-1.5.6-py3.6.egg', 
'/Users/MYNAME/anaconda/lib/python3.6/site-packages/aeosa', 
'/Users/MYNAME/anaconda/lib/python3.6/site-packages/IPython/extensions', 
'/Users/MYNAME/.ipython'] 

グレート、何ら問題はいずれかのパッケージからインポートしない:注意すべき

ことの一つは、私のPYTHONPATHが

>> echo $PYTHONPATH 

>> 

明らか空ですが、Pythonで、私はsys.pathを見ればです。

は、だから私は

MYPACKAGE3/ 
    bin/ 
    README.md 
    CHANGES.txt 
    setup.py 
    MANIFEST.IN 
    my_module/ 
     __init__.py 
     sub_module1.py 
     sub_module2.py 

MYPACKAGE2は私のパス

>> echo $PATH 
/Users/MYNAME/google-cloud-sdk/bin:/Users/MYNAME/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Users/MYNAME/Documents/Python_Programs/MYPACKAGE1:/Users/MYNAME/Documents/GitRepos/MYPACKAGE2:/Users/MYNAME/Documents/GitRepos/MYPACKAGE3 

にこれを追加しましたが、何らかの理由で私はpythonでそれをインポートすることはできません、それはだと同じ構造を有する第三パッケージを作りました私のsys.pathにはありません(sys.pathはまったく同じです)。

>> import my_module 
ModuleNotFoundError: No module named 'my_module' 

何が変更されたかわかりません。私は何が欠けていますか?

ありがとうございます。

答えて

0

答えは私の$PATH変数はそれと関係がありません。明確にするために、私はPython 3.6を使用しているので、2.7で異なるかもしれません。

私はanaconda /.../ site-packagesディレクトリに、ずっと前に作成したはずのファイルがありました。 .../site-packagesディレクトリだけでなく、そのディレクトリ内の任意の.pthファイルにリストされているすべてのディレクトリ(または、sys.path re the hitchikers guide to packagingの任意のディレクトリのように見えます)によってsys.pathが作成されたようです。

Pythonのファイルレイアウト

A Pythonのインストールは、モジュールディレクトリ内のsite-packagesディレクトリを持っています。このディレクトリは、ユーザーがインストールしたパッケージを削除する場所です。このディレクトリの.pthファイルには、追加のパッケージがインストールされているディレクトリへのパスが含まれています。

私はこの質問が幾分難解であることを知っていますが、それは他のストラングラーがインポートシステムを理解しようとするのを助けてくれることを願っています。

0

あなたますecho $ PATHは

"Users/MYNAME/Documents/GitRepos/MYPACKAGE3" 

なく

"/Users/MYNAME/Documents/GitRepos/MYPACKAGE3". 

は、あなたが "/" 初めに逃したように見えますがあります。

のsys.pathへのカスタムパスを追加するには:

import sys 
sys.path.append("/Users/MYNAME/Documents/GitRepos/MYPACKAGE3/") 

またはBASHで:

-bash-4.1$export PYTHONPATH="${PYTHONPATH}:/Users/MYNAME/Documents/GitRepos/MYPACKAGE3/" 

をしてから、モジュールをインポートしてみてください。

+0

申し訳ありませんが、タイプミスでした。間違いなくそこにあります。 – RSHAP

+0

3番目のパッケージパスを追加した後にsys.pathを貼り付け、パッケージのインポート中にエラーが発生しました。 –

+0

sys.pathはこれまでとまったく同じです。 ModuleNotFoundエラーを投稿しました – RSHAP

関連する問題