[解決済み] なぜ sys.path.insert(1, path) の代わりに sys.path.append(path) を使用するのですか?
質問
編集してください。 Ulf Rompeのコメントに基づいています。 の代わりに "1"を使用することが重要です。 を使うことが重要で、そうしないと sys.path .
私はかなり長い間(1年以上)pythonをやっていますが、なぜ人々があなたに
sys.path.append()
の代わりに
sys.path.insert()
. 実演してみましょう。
私がPyWorkbooksという名前のモジュール(私のコンピュータにインストールされている)で作業しているとします。しかし、私は同時にPyWorkbooksを組み込んだ別のモジュール(PyJobとします)で作業しています。 PyJobで作業しているときにPyWorkbooksのエラーを発見し、それを修正しているので、開発版をインポートしたいと思います。
両方で作業する方法は複数ありますが(たとえば、PyJobの中にPyWorkbooksのプロジェクトを入れることができます)、それでもパスで遊ぶ必要が出てくることがあります。 しかし
を単純に行うことはできません。
sys.path.append()
でPyWorkbooksのあるフォルダに移動します。
. なぜですか? pythonがインストールされたPyWorkbooksを最初に見つけるからです!
このため、sys.path.insert(1, path_to_dev_pyworkbooks) を実行する必要があります。
まとめると
sys.path.append(path_to_dev_pyworkbooks)
import PyWorkbooks # does NOT import dev pyworkbooks, imports installed one
または
sys.path.insert(1, path_to_dev_pyworkbooks) # based on comments you should use **1 not 0**
import PyWorkbooks # imports correct file
これは過去に何度か問題を起こしたことがあります。
sys.path.insert(1, path)
を推奨するようになることを望みます。もしあなたが手動でパスを挿入しているなら、それがあなたが使いたいパスであると言うのは安全だと思います。
それとも私が何か間違っているのでしょうか? それは時々私を悩ませる質問で、私はそれをオープンにしたかったのです!
どのように解決するのですか?
複数のバージョンのパッケージ/モジュールがある場合、そのパッケージ/モジュールに対して virtualenv を使う必要があります (強調)。
virtualenv
は、分離された Python 環境を作るためのツールです。対処されている基本的な問題は、依存関係とバージョン、そして間接的なパーミッションの問題です。 LibFooのバージョン1を必要とするアプリケーションがあり、別のアプリケーションはバージョン2を必要とするとします。この両方のアプリケーションを使うにはどうしたらよいでしょうか。 もし、すべてを
/usr/lib/python2.7/site-packages
(またはあなたのプラットフォームの標準的な場所が何であれ) にすべてをインストールすると、アップグレードすべきでないアプリケーションを意図せずにアップグレードしてしまうという状況に陥りがちです。あるいは、より一般的には、アプリケーションをインストールしたいときに そのままにしておく ? アプリケーションが動作する場合、そのライブラリやそのバージョンに何らかの変更があると、アプリケーションが壊れてしまう可能性があります。
また、パッケージをグローバルな
site-packages
ディレクトリにインストールできない場合はどうでしょうか?例えば、共有ホストで。これらのすべてのケースで
virtualenv
はあなたを助けることができます。これは、独自のインストールディレクトリを持ち、他の virtualenv 環境とライブラリを共有しない環境を作成します (オプションで、グローバルにインストールされたライブラリにもアクセスしません)。
というわけで、人々は
insert(0,
は間違っている、つまり、複数の環境を管理するという問題に対する不完全でその場しのぎの解決策であると考えられている理由です。
関連
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] なぜlist.join(string)ではなくstring.join(list)なのでしょうか?
-
[解決済み] フルパスでモジュールをインポートするには?
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] 億の相対的輸入
-
[解決済み] 相対パスからモジュールをインポートする
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する
-
[解決済み] sys.path/PYTHONPATHにディレクトリを追加する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] モジュール読み込み時に sys.path.insert(0, path) と sys.path(append) を使用した場合の影響について
-
[解決済み] sys.path/PYTHONPATHにディレクトリを追加する。
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] PYTHONPATHとsys.pathの比較