programing

pip을 사용하여 패키지의 여러 버전 설치

codeshow 2023. 8. 20. 12:55
반응형

pip을 사용하여 패키지의 여러 버전 설치

내 애플리케이션에서 사용하고자 하는 것은 다음과 같습니다.

  • packageA은 것한은이 합니다.packageX==1.3
  • packageB은 것한은이 합니다.packageX==1.4
  • packageX==1.5

의 의설방법는치하전을 해야 ?packageX이 상황을 처리하기 위해 핍과 함께?

핍은 이것을 도와주지 않을 것입니다.

특정 버전을 설치하도록 지시할 수 있지만 다른 버전보다 우선합니다.반면에 두 개의 가상 환경을 사용하면 두 버전을 동시에 사용하지 않고 동일한 시스템에 설치할 수 있습니다.

두 버전을 모두 다른 이름으로 Python 경로에 배치하여 수동으로 설치하는 것이 가장 좋습니다.

그러나 두 lib가 동일한 이름을 가질 것으로 예상되는 경우(그리고 그렇게 해야만 하는 경우), 다음과 같은 일부 가져오기 별칭으로 필요한 버전을 선택할 수 있도록 수정해야 합니다.

import dependencyname_version as dependencyname

현재 이 작업을 수행할 수 있는 깨끗한 방법은 없습니다.당신이 바랄 수 있는 최선은 이 해킹이 작동하는 것입니다.

차라리 두 립 중 하나를 버리고 동등한 립으로 대체하거나, 새로운 버전의 종속성을 받아들이고 패치를 커뮤니티에 반환하는 것이 낫습니다.

eaea의 합니다. 패키지의 소스를 다운로드합니다.각각의 개별 폴더에 설치합니다.1.패키지를 버전으로 .저는 버전 1.10 패키지를 가지고 있었지만, 몇 가지 작업을 위해 개발 버전으로 전환하고 싶었습니다.모듈의 했습니다.git clone https://github.com/networkx/networkx.git cd netwokrx: 이전버의폴만습니다들었더를.mkdir /home/username/opt/python"PYONPATH"로 했습니다.export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/다음으로 다음을 사용하여 설치했습니다.python setup.py install --prefix=/home/username/opt/python

이제 PYTHONPATH가 다른 사이트 패키지 폴더를 가리키고 있으므로 명령줄에서 python을 실행하고 새 모듈을 가져오면 작동합니다.스위치를 다시 전환하려면 PYONPATH에서 새 폴더를 제거합니다.

>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'

블렌더에서 파이썬과 함께 사용하는 불쾌한 해결 방법은 유사한 버전의 파이썬을 설치하고 하위 프로세스를 사용하여 다른 버전이 필요한 작업을 수행하도록 하는 것입니다.블렌더 파이썬은 팬더와 스파이를 설치하는 것 이상의 일을 하면 약간 신경질적이 되는 경향이 있습니다.저는 블렌더와 함께 가상 환경을 사용하여 이것을 시도해 보았지만 그것은 일을 망치는 경향이 있습니다.

또한 데이터 시각화를 위해 블렌더를 사용할 경우 버전 번호 폴더에 구성 폴더를 추가하고 싶을 것입니다. 그러면 모든 추가 기능이 해당 폴더에 유지되고 다른 블렌더 설치를 훨씬 더 쉽게 방해할 수 있습니다.블렌더용 애드온을 만드는 많은 사람들은 '프로그래머'가 아니기 때문에 종종 그런 식의 지식을 가진 사람들은 매우 까다로운 일을 할 것이고 이것이 제가 사용할 수 있는 최고의 해결책이었습니다.

또 다른 해결 방법은 수동으로 init 파일을 찾아서 importlib를 사용하여 글로벌에 수동으로 추가하는 것입니다.이것은 위험을 수반합니다.이 작업을 수행하면 일부 모듈은 정상적으로 재생되고, 다른 모듈은 특수 문제 해결 세션으로 이어질 수 있는 엉터리 기능을 제공합니다.버전을 좋아하도록 유지하면 문제가 줄어듭니다. 가상 환경 뒤에서 모듈러스를 가져오기 위해 이 기능을 사용하는 '좋아요' 운이 좋았지만 블렌더의 파이썬으로 작업할 때 하위 프로세스 호출을 사용하는 이유가 있습니다.

def importfromfilelocation(x,y,z):
    #"""x = 'tk',y = "tkinter", z =r'C:\pyth"""
    mod_alis = x
    spec = importlib.util.spec_from_file_location(y, z)
    print(spec)
    mod_alis = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(mod_alis)
    globals()[str(x)]= mod_alis

이전 파이썬 라이브러리를 업데이트해야 할 때마다 다음 작업을 수행합니다.

  1. 업데이트해야 하는 라이브러리 복제(일반적으로 GitHub에서)
  2. 현재 사용 중인 버전으로 Git Checkout 실행 중
  3. 일부 패키지 저장소에서 이전 버전을 다른 이름으로 패키징(일반적으로 Gemfury)
  4. 내가 지정한 새 이름으로 이전 버전 설치
  5. 패키지를 사용할 새 버전으로 업데이트
  6. 새 버전이 실패할 경우 폴백 만들기 - 이전 버전으로 폴백

코드는 다음과 같습니다.

import ujson      # ujson version 5.7.0
import ujson_old  # ujson version v1.34

ujson_dumps(some_obj: Any) -> str:

  try:
    return ujson.dumps(some_obj)
  except ValueError:
    logging.error('Error parsing with new ujson version')

  return ujson_old(some_obj)

저는 ujson이 매우 오래된 버전에서 최신 버전으로 업그레이드된 방법에 대한 이 블로그 게시물을 읽는 것을 추천합니다.

또 다른 "해결 방법"은 IPC/RPC를 사용하고 서비스에서 분리된 패키지를 실행하는 것입니다.종속성이 다른 라이브러리에 있는 경우 패키지 사용에 따라 분리할 수 있습니다.

언급URL : https://stackoverflow.com/questions/6570635/installing-multiple-versions-of-a-package-with-pip

반응형