2017-04-13 11 views
1

Pythonライブラリがインストールされていますが、インストールしたライブラリを変更せずに別のフォルダからロードしたいとします。次のコードを使用して、パスを置き換えようとしましたが、ライブラリをロードするために2つのパスが格納され、最初の優先順位は古いものです。新しいものに優先順位を設定する(または古いものを削除する)にはどうしたらいいですか?Pythonライブラリをインポートするパスを選択する方法

import pkg_resources 
pkg_resources.declare_namespace('google') 
pkg_resources.fixup_namespace_packages(_MY_LIBRARY_DIR) 
import google.protobuf 
print(google.protobuf.__path__) 

出力:[ '古いパス'、 '新しいパス']

+0

Pythonは、現在実行中のプログラムのディレクトリ内のパッケージを探し、次に同じディレクトリ内のモジュールを探し、環境変数[PYTHONPATH](http://stackoverflow.com/questions)に従います。/19917492/how-to-use-pythonpath)を参照してください。 virtualenvやpyenvのようなパッケージは、同じシステム内の同じパッケージのいくつかのバージョンの共存を可能にするために、PYTHONPATHの操作を自動化します。 –

+1

これは、X/Y問題の古典的な例のようです。あなたの問題X(1つのシステムで同じパッケージの矛盾したバージョンを持つ方法)を尋ねるのではなく、あなたの考案した解決策Y(Pythonモジュールのインポートパスを使っている)について質問しています。 –

答えて

0

あなたはモジュールやライブラリのパスを見つけるために__file__を使用できますが、

print(google.protobuf.__file__) 

が、何がしたいです達成は、仮想環境の古典的なケースです。

仮想環境は、異なるプロジェクトで必要とされる依存関係を別々の場所に保存するためのツールです。仮想環境は仮想のPython環境を作成することで実現します。

Virtualenv

Pyenv

0

使用VirtualenvHitchhikers Guide to Pythonから

仮想環境は、仮想のPythonに彼らのために 環境を作成することによって、別の場所で 異なるプロジェクトで必要な依存関係を維持するためのツールです。 「Project Xはバージョン1.xに依存しますが、Project Yには4.xが必要です」というジレンマが解決され、グローバルサイトパッケージ ディレクトリがきれいで管理しやすい状態に保たれます。

関連する問題