私はPythonで独自のパッケージを持っており、それを頻繁に使用しています。PYTHONPATHまたはsys.pathを使用せずにインポートされるように、パッケージを配置する必要がある最もエレガントな、または従来のディレクトリは何ですか?
たとえば、サイトパッケージはどうですか?
/usr/lib/python2.7/site-packages。
Pythonでは、パッケージをコピーしてそこに貼り付けるのが一般的ですか?
私はPythonで独自のパッケージを持っており、それを頻繁に使用しています。PYTHONPATHまたはsys.pathを使用せずにインポートされるように、パッケージを配置する必要がある最もエレガントな、または従来のディレクトリは何ですか?
たとえば、サイトパッケージはどうですか?
/usr/lib/python2.7/site-packages。
Pythonでは、パッケージをコピーしてそこに貼り付けるのが一般的ですか?
~/foo/bar/挿入export PYTHONPATH=~/foo/bar # fields separated by ":"し、~/.bashrcファイルに追加します)。man pythonこの手動パスは、デフォルトのPython検索パスの前にあります。を参照してください。名前の衝突に注意してください。
回答:
私は通常、インポートする準備ができているものをユーザーサイトディレクトリに置きます。
~/.local/lib/pythonX.X/site-packages
プラットフォームに適したディレクトリを表示するには、次を使用できます python -m site --user-site
編集:sys.path作成すると表示されます:
mkdir -p "`python -m site --user-site`"
python -m site --user-siteは、作成するディレクトリを教えてくれます。sys.modules実際に作成するまで表示されません。
mkdirしmkdir -pて中間ディレクトリを作成する必要があります。私も持っていませんでした~/.local。;-)
したがって、私のような初心者やディレクトリがあまりよく整理されていない場合は、この方法を試してみてください。
Pythonターミナルを開きます。私の場合、numpyなどの動作がわかっているモジュールをインポートして、次の手順を実行します。
Import numpy
numpy.__file__
その結果、
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'
結果numpy.__file__は、モジュールと一緒にpythonファイルを配置する必要がある場所です(を除くnumpy/__init__.py)ので、私にとっては
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages
これを行うには、ターミナルに移動して次のように入力します
mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"
これで、モジュールをインポートできるようになります。
re.__file__は私のために働いた。
これは私にとってはうまくいくものです(プライベートpipリポジトリにアップロードされるPythonパッケージを頻繁に作成する必要があります)。質問に対する@joranのコメントについて詳しく説明します。
python setup.py sdist --format=tar。作成されたパッケージは、理想的にはdistフォルダー内にある必要があります。pip install <yourpackage>.tarpip install --force-reinstallライブラリをもっといじって、distパッケージを再作成する必要がある場合に使用できます。
私はこの方法が私にとって素晴らしいことを発見しました。ローカルだけでなく他のシステムを使用するためにモジュールをパッケージ化する必要がない場合、この方法はやり過ぎかもしれません
ハッピーハッキング。
私のMacでは、を実行しましたsudo find / -name "site-packages"。それは私のようないくつかのパスを与えた/Library/Python/2.6/site-packages、/Library/Python/2.7/site-packagesと/opt/X11/lib/python2.6/site-packages。
そのため、v2.7またはv2.6を使用している場合、モジュールを配置する場所を知っていました。
それが役に立てば幸い。
インポートフォルダは、次のソースコードを追加することで抽出できます。
import sys
print sys.path
自動シンボリックリンク生成の例は次のようになります。
ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`
「em」の代わりに、「インストールしたばかりなのにPythonが認識できない」他のパッケージを使用することもできます。
以下、コメントで求められていることを詳しく説明します。
次のコマンドを使用してPythonモジュールemまたはpyserialをインストールしたとします(例はubuntu用です)。
sudo pip install pyserial
出力は次のようになります。
Collecting pyserial
Downloading pyserial-3.3-py2.py3-none-any.whl (189kB)
100% |████████████████████████████████| 194kB 2.3MB/s
Installing collected packages: pyserial
Successfully installed pyserial-3.3
質問は次のようになります-Pythonはモジュールpyserialを認識できません、なぜですか?モジュールがインストールされている場所は、Pythonが特定のユーザーアカウントを探している場所ではないためです。
解決策-pyserialが到着したパスからPythonが探しているパスへのシンボリックリンクを作成する必要があります。
シンボリックリンク作成コマンドは次のようになります。
ln -s <what_to_link> <where_to_link>
正確な場所を入力する代わりに、コマンドを実行してモジュールが保存されている場所を教えてくれるようにpipに要求しています。
pip show pyserial | grep "Location"| cut -d " " -f2
正確な場所を入力する代わりに、コマンドを実行して、インストールされているモジュールを探す場所をPythonに指示します。
python -m site --user-site
両方のコマンドは「 `」文字でエスケープする必要があります(通常、USキーボードの1ボタンの左側にあります)
その結果、次のコマンドがlnに提供され、欠落しているシンボリックリンクが作成されます。
ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages
または、ディストリビューションとpython / pipのデフォルトに応じて、同様のもの。