패키지를 찾을 때 다른 디렉터리를 포함하도록 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/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는 일반적으로 사용자 수준 시스템 경로에 추가하는 데 사용됩니다. 모든 사용자가 얻을 수 있는 파일에 넣을 수 있습니다. 예를 들어. 데비안에는 맨 위에 /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의 검색 경로 수정. 이것은 사용 가능한 대안에 대한 좋은 토론입니다.

답변2

사용sys.path:

import sys
sys.path.append("/home/me/mypy")

당신은 또한 확인할 수 있습니다site사이트별 경로를 계산하는 방법을 설명하는 모듈 문서입니다.

관련 정보