development

pip를 사용하여 로컬 파일 시스템 폴더에서 virtualenv로 Python 패키지 설치

big-blog 2020. 3. 17. 23:35
반응형

pip를 사용하여 로컬 파일 시스템 폴더에서 virtualenv로 Python 패키지 설치


로컬 파일 시스템에서 pip를 사용하여 패키지를 설치할 수 있습니까?

python setup.py sdist적절한 tar.gz 파일을 만든 패키지를 실행 했습니다. 이 파일은 내 시스템의에 저장됩니다 /srv/pkg/mypackage/mypackage-0.1.0.tar.gz.

이제 가상 환경에서 pypi 또는 특정 로컬 위치에서 패키지를 설치하고 싶습니다 /srv/pkg.

이게 가능해?

추신 : 나는 내가 지정할 수 있음을 알고있다 pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz. 그것은 효과가 있지만, /srv/pkg입력하면 pip가 검색 할 다른 장소로 위치를 사용하는 것에 대해 이야기하고 있습니다 pip install mypackage.


나는 당신이 찾고있는 것이 --find-links옵션 이라고 확신합니다 .

index.html모든 패키지에 대한 링크를 나열하는 로컬 패키지 색인에 대한 더미를 생성해야 할 수도 있습니다 . 이 도구는 다음을 도와줍니다.

https://github.com/wolever/pip2pi


는 어때::

pip install --help
...
  -e, --editable <path/url>   Install a project in editable mode (i.e. setuptools
                              "develop mode") from a local project path or a VCS url.

예를 들어 pip install -e /srv/pkg

여기서 / srv / pkg는 'setup.py'를 찾을 수있는 최상위 디렉토리입니다.


설치 pyfuzzy중이지만 PyPI에 없습니다. 메시지를 반환합니다 : No matching distribution found for pyfuzzy.

나는 대답을 시도했다

pip install  --no-index --find-links=file:///Users/victor/Downloads/pyfuzzy-0.1.0 pyfuzzy

그러나 작동하지 않으며 다음 오류를 반환합니다.

인덱스 무시 : https://pypi.python.org/simple pyfuzzy 수집 pyfuzzy 요구 사항을 충족하는 버전을 찾을 수 없습니다 (버전에서) pyfuzzy에 대해 일치하는 분포가 없습니다.

마침내 나는 거기에 간단한 좋은 방법을 찾았습니다 : https://pip.pypa.io/en/latest/reference/pip_install.html

Install a particular source archive file.
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
$ pip install http://my.package.repo/SomePackage-1.0.4.zip

그래서 다음 명령이 나를 위해 일했습니다.

pip install ../pyfuzzy-0.1.0.tar.gz.

그것이 당신을 도울 수 있기를 바랍니다.


이것이 내가 사용한 해결책입니다.

import pip


def install(package):
    # Debugging
    # pip.main(["install", "--pre", "--upgrade", "--no-index",
    #         "--find-links=.", package, "--log-file", "log.txt", "-vv"])
    pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])


if __name__ == "__main__":
    install("mypackagename")
    raw_input("Press Enter to Exit...\n")

나는 이것을 pip 설치 예제다른 질문에 대한 Rikard의 답변 에서 함께 정리했습니다 . "--pre"인수를 사용하면 비 프로덕션 버전을 설치할 수 있습니다. "--no-index"인수는 PyPI 인덱스를 검색하지 않습니다. "--find-links =." 로컬 폴더에서 인수를 검색합니다 (상대 또는 절대 일 수 있음). 디버깅을 위해 "--log-file", "log.txt"및 "-vv"인수를 사용했습니다. "-업그레이드"인수를 사용하면 이전 버전보다 최신 버전을 설치할 수 있습니다.

또한 제거하는 좋은 방법을 찾았습니다. 이것은 여러 다른 파이썬 환경이있을 때 유용합니다. 의도하지 않은 설치 제거를 방지하기위한 안전 조치와 함께 "install"대신 "uninstall"을 사용하는 것과 동일한 기본 형식입니다.

import pip


def uninstall(package):
    response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
    if "y" in response.lower():
        # Debugging
        # pip.main(["uninstall", package, "-vv"])
        pip.main(["uninstall", package])
    pass


if __name__ == "__main__":
    uninstall("mypackagename")
    raw_input("Press Enter to Exit...\n")

로컬 폴더에는 install.py, uninstall.py, mypackagename-1.0.zip 파일이 있습니다.


--find-links 옵션 은 작업을 수행하며 requirements.txt파일 에서 작동 합니다!

패키지 아카이브를 일부 폴더에 넣고 요구 사항 파일을 변경하지 않고 최신 폴더를 가져올 수 있습니다. 예를 들면 requirements다음과 같습니다.

.
└───requirements.txt
└───requirements
    ├───foo_bar-0.1.5-py2.py3-none-any.whl
    ├───foo_bar-0.1.6-py2.py3-none-any.whl
    ├───wiz_bang-0.7-py2.py3-none-any.whl
    ├───wiz_bang-0.8-py2.py3-none-any.whl
    ├───base.txt
    ├───local.txt
    └───production.txt

지금 requirements/base.txt넣어 :

--find-links=requirements
foo_bar
wiz_bang>=0.8

독점 패키지를 업데이트하는 깔끔한 방법

이 방법으로 local folderAND pypi에서 동일한 단일 호출로 패키지를 설치할 수 있습니다 .pip install -r requirements/production.txt

추신. 내보기 cookiecutter - djangopackage 기반 요구 사항 조직 폴더 요구 사항 및 사용을 분할하는 방법을 볼 포크.


virtualenv와 requirements.txt파일 이 있다고 가정하면 이 파일 내부에서 패키지를 가져올 위치를 정의 할 수 있습니다.

# Published pypi packages 
PyJWT==1.6.4
email_validator==1.0.3
# Remote GIT repo package, this will install as django-bootstrap-themes
git+https://github.com/marquicus/django-bootstrap-themes#egg=django-bootstrap-themes
# Local GIT repo package, this will install as django-knowledge
git+file:///soft/SANDBOX/python/django/forks/django-knowledge#egg=django-knowledge

디렉토리 requirements.txtegg_dir디렉토리로 요구 사항 보유

로컬 캐시를 빌드 할 수 있습니다.

$ pip download -r requirements.txt -d eggs_dir

그런 다음 "캐시"를 사용하는 것은 간단합니다 :

$ pip install -r requirements.txt --find-links=eggs_dir


로부터 설치 - 패키지 페이지에서 간단히 실행할 수 있습니다 :

pip 설치 / srv / pkg / mypackage

여기서 / srv / pkg / mypackagesetup.py를 포함하는 디렉토리 입니다.


또한 1 , 아카이브 파일에서 설치할 수 있습니다.

pip install ./mypackage-1.0.4.tar.gz

1 질문에 언급되었지만 인기로 인해 포함되어 있습니다.


나는 정말 간단하고 비참하게 실패한 것을 달성하려고 노력하고 있습니다. 어쩌면 나는 바보입니다.

어쨌든, Dockerfile파이썬 패키지 zip 파일을 다운로드 하는 스크립트가 있고 (예 : GitHub에서) 설치하려는 file:///경우 다음 예제 와 같이 접두사를 사용하여 설치할 수 있습니다 .

$ wget https://example.com/mypackage.zip
$ echo "${MYPACKAGE_MD5}  mypackage.zip" | md5sum --check -
$ pip install file:///.mypackage.zip

참고 : 패키지를 사용하여 바로 설치할 수 있다는 것을 알고 pip install https://example.com/mypackage.zip있지만 필자의 경우 체크섬을 확인하고 싶었습니다. (파라노이드는 충분하지 않습니다) pip가 제공하는 다양한 옵션을 사용하려고 할 때 비참하게 실패했습니다 #md5.

을 사용하여 직접 간단한 작업을 수행하는 것은 놀랍게도 실망 스럽습니다 pip. 체크섬을 전달하고 설치 하기 전에pip zip이 일치하는지 확인 하고 싶었 습니다.

나는 아마도 매우 어리석은 짓을하고 있었지만 결국 포기하고 이것을 선택했습니다. 다른 사람들이 비슷한 것을 시도하는 데 도움이되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/15031694/installing-python-packages-from-local-file-system-folder-to-virtualenv-with-pip

반응형