パッケージを見つけるときに別のディレクトリを含めるようにPythonを設定します。

パッケージを見つけるときに別のディレクトリを含めるようにPythonを設定します。

私はSUSEコンピュータを使用しており、デフォルトのPythonサイトパッケージの場所はです/usr/lib64/python2.6/site-packages。一部のパッケージは自動的にインストールされます/usr/lib/python2.6/site-packages。 Pythonが見えるようにどのように設定しますか/usr/lib64/python2.6/site-packages

ベストアンサー1

(必要に応じてエラーや欠落を修正してください。ありがとうございます。)

まず質問とコメントです。私はSUSEを使用していないので、これについて懐疑的です。 /usr/lib/python2.6/site-packages 公式パッケージにパッケージがインストールされていますか?もしそうなら、SUSEが破損しているので、これが起こる可能性はほとんどありません。公式パッケージでない場合は、パッケージに標準パスを使用するように依頼するか、SUSEにウィッシュリストのバグを送信してこの追加パスをサポートするように依頼することができます。これにより、あなたや他の人のさらなる問題を減らすことができます。

現在、次の可能性があります(範囲が縮小する順序で)。

  1. すべてのユーザーのモジュール検索パスを変更する(方法1)

    Python インストールでモジュール検索パスを変更します。

    基本モジュール検索パスはバイナリに組み込まれています。実行時に site.py ファイルなどで追加のパスを設定できます。たとえば、Debianはサイト固有の設定に/usr/lib/python2.6/site.py(デフォルトのPython 2.6インストール用)を使用します。ファイルの上部には、次の内容が表示されます。

    Append module search paths for third-party packages to `sys.path`.
    
    ****************************************************************
    * This module is automatically imported during initialization. *
    ****************************************************************
    [...]
    
    This will append site-specific paths to the module search path.
    

    Debian パッチ debian/patches/site-locations.diff によると

    Debianとその派生製品の場合、このsys.pathはディストリビューションに配布されたパッケージディレクトリに展開されます。ローカルプラグインは/usr/local/lib/python/dist-packagesにインストールされ、Debianプラグインは/usr/{lib,share}/python/dist-packagesにインストールされます。 /usr/lib/python/site-packages を使用しません。

    問題のパッチは

                    sitedirs.append(os.path.join(prefix,
    "Lib", "site-packages"))
                 elif os.sep == '/':
        +            sitedirs.append(os.path.join(prefix,
    "local/lib",
        +                                        "python" + sys.version[:3],
        +                                        "dist-packages"))
                     sitedirs.append(os.path.join(prefix,
    "lib",
                                                 "python" + sys.version[:3],
        -                                        "site-packages"))
        -            sitedirs.append(os.path.join(prefix,
    "lib", "site-python"))
        +                                        "dist-packages"))
        +            sitedirs.append(os.path.join(prefix,
    "lib", "dist-python"))
                 else:
                     sitedirs.append(prefix)
                     sitedirs.append(os.path.join(prefix,
    "lib", "site-packages"))
    

    したがって、システムパッケージのsite.pathを変更して、変更されたモジュール検索パスを生成できます。しかし、おそらくあなたはこれをしたくないでしょう。まず、ディストリビューションPythonパッケージのすべてのアップデートにそれらを統合する必要があります。

  2. すべてのユーザーのモジュール検索パスを変更する(方法2)

    相対パスまたは絶対パスを含む検索パスに既に存在するディレクトリにsome.pth形式のファイルを追加します。例えば。

    /usr/local/lib/python2.6/dist-packages$ cat foo.pth 
    /home/faheem/dummypythonpath
    

    他の端末でやる

    >>> import sys
    >>> sys.path
        [...,'/home/faheem/dummypythonpath',...,]
    
  3. すべてのユーザーのモジュール検索パスを変更する(方法3)

    環境変数 PYTHONPATH は通常、ユーザーレベルのシステムパスに追加するために使用されます。誰でも入手できるファイルに入れることができます。例えば。 Debian にはトップに /etc/bash.bashrc があります。

    # System-wide .bashrc file for interactive bash(1) shells.
    
    # To enable the settings / commands in this file for login shells as well,
    # this file has to be sourced in /etc/profile.
    

    したがって、そこにまたはPYTHONPATHを追加することができます。おそらくログインシェルとインタラクティブシェルの両方に使用したいので、これを確認したいと思います。残念ながら、ディストリビューションはこれを達成するのに一貫性がない傾向があります。

    PYTHONPATHのパスは、システムのデフォルトの検索パスのリストに追加されます(例:sys.pathで利用可能 - 以下を参照)。 PYTHONPATHがすでに設定されている可能性を考慮して、必要な他のディレクトリを追加してください。

    export PYTHONPATH=$PYTHONPATH:"/home/username/lib/python2.6/dist-packages"
    

    PYTHONPATH変数をインポートした後にsys.pathを再確認すると、パスが追加されたこと
    がわかります。 PYTHONPATHのパスが既存のパスに追加される場所は、実装によって指定されて
    いないようです。

  4. 各ユーザーのモジュール検索パスを変更します。

    一般的なアプローチは、ユーザーのbashrcでPYTHONPATHを変更することです~/.bashrc。つまり、ログインシェルとインタラクティブシェルから来ていることを再確認してください。

  5. スクリプトごとにモジュール検索パスを変更します。これは sys.path に加えて行われます。つまり、

    import sys
    sys.path.append(some_additional_path)
    

    これはそれをインポートするスクリプトにのみ適用されます。私が知っている限り、これは通常、非標準の場所(たとえば、ホームディレクトリのどこか)にモジュールをインポートするときに一時的に使用するためのものです。

グレッグワードも参照してください。Pythonの検索パスを変更する。これは利用可能な代替案の良い議論です。

おすすめ記事