pip3을 통해 오프라인으로 모든 종속성을 갖춘 Python 패키지를 설치하는 방법은 무엇입니까?

pip3을 통해 오프라인으로 모든 종속성을 갖춘 Python 패키지를 설치하는 방법은 무엇입니까?

우선 인터넷에 접속할 수 없는 서버에 Ansible을 설치했습니다. 하지만 내 접근 방식이 올바른지 궁금합니다.

처음에는 pip3.

pip3 download ansible -d .

그 결과 다음 파일이 다운로드되었습니다.

ansible-2.9.4.tar.gz                          
cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl  
MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl  
PyYAML-5.3.tar.gz
cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl  
Jinja2-2.11.1-py2.py3-none-any.whl                
pycparser-2.19.tar.gz                              
six-1.14.0-py2.py3-none-any.whl

이제 이 파일을 원격 컴퓨터에서 사용할 수 있게 만들었으므로 다음을 사용하려고 했습니다.

pip3 install ansible-2.9.4.tar.gz

앤서블을 설치합니다.

이로 인해 다음 오류가 발생했습니다.

Processing ./ansible-2.9.4.tar.gz
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 
'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7f00726f9ef0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /simple/jinja2/

그래서 Jinja2를 수동으로 설치하려고 했습니다.

pip3 install jinja2-2.11.1-py2.py3-none-any.whl

그러나 이것도 작동하지 않았습니다.

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection
 broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7fd303a23940>: Failed to establish a new connection: [Errno -2] Name or service not known',)': 
/simple/markupsafe/

Markupsafe를 설치한 후에는 Jinja2도 설치할 수 있습니다. 결국 pip3 install ansible-2.9.4.tar.gzansible을 성공적으로 설치했습니다.

이제 내 질문은 다음과 같습니다. pip다운로드한 파일을 사용하여 종속성을 설치하도록 지시할 수 있는 방법이 있습니까 ? 아니면 모든 종속성이 있는 특정 Python 패키지를 오프라인으로 설치하는 더 쉬운 접근 방식이 있습니까?

귀하의 도움과 안부 인사에 감사드립니다. 야버스

답변1

pip다운로드한 파일을 사용하여 종속성을 설치하도록 지시할 수 있는 방법이 있습니까 ? 아니면 모든 종속성이 있는 특정 Python 패키지를 오프라인으로 설치하는 더 쉬운 접근 방식이 있습니까?

나는 당신이 찾고 있는 것이 바로 그것이라고 믿습니다.--인덱스 없음그리고--찾기-링크. pip install​공식 pip install옵션 문서에 따르면:

--인덱스 없음

패키지 색인을 무시합니다(대신 --find-links URL만 확인).

-f, --find-링크

HTML 파일에 대한 URL 또는 경로인 경우 아카이브에 대한 링크를 구문 분석합니다. 로컬 경로 또는 file:// url이 디렉토리인 경우 디렉토리 목록에서 아카이브를 찾으세요.

이러한 옵션을 사용하면 예를 들어 다음과 같은 작업을 수행할 수 있습니다. 로컬 설치:

pip3 install --no-index --find-links /some/path <package name>

또는 원격 설치(예: HTTP를 통해):

pip3 install --no-index --find-links http:\\remotes\server <package name>

ansible귀하의 경우에는 간단히 패키지 이름을 다음과 같이 사용할 수 있습니다 .

pip3 install --no-index --find-links /some/path ansible

pip3 install --no-index --find-links http:\\remotes\server ansible

원하는 경우 전체 파일 이름을 사용할 수 있습니다.

pip3 install --no-index --find-links /some/path ansible-2.9.4.tar.gz

pip3 install --no-index --find-links http:\\remotes\server ansible-2.9.4.tar.gz

필요한 모든 종속성이 동일한 위치(원래 질문에 나열된 대로)에 있다고 가정하면 정상적으로 설치되어야 합니다(즉, 각 종속성을 수동으로 설치할 필요가 없음).


요구사항

또 다른 옵션은 적절한 종속성 설치 순서로 요구 사항 파일을 만드는 것입니다. 예:

전. 요구사항.txt

/path/to/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
/path/to/Jinja2-2.11.1-py2.py3-none-any.whl 
/path/to/ansible-2.9.4.tar.gz
# ...                          

그런 다음 eg를 사용하여 pip3 install -r requirements.txt나열된 패키지를 설치하십시오. 예를 들어 HTTP 링크를 다시 사용할 수도 있습니다.

전. 요구사항.txt

http:\\remotes\server\MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
http:\\remotes\server\Jinja2-2.11.1-py2.py3-none-any.whl 
http:\\remotes\server\ansible-2.9.4.tar.gz
# ... 

여기서 분명한 단점은 한 패키지가 다른 패키지에 종속되어 있다고 가정하면 특정 패키지를 설치해야 하는 순서를 이미 알아야 한다는 것입니다.


기타 URL 옵션

다음을 살펴보는 것도 좋습니다.버전 관리 시스템(VCS) 섹션VCS 링크(예: Git, Mercurial, Subversion 및 Bazaar)와의 pip install결합 예를 제공하는 문서 입니다 .pip install


참고자료

핍 설치

pip 설치(옵션)

답변2

당신에게 필요한 것은 전체 거울을 갖는 것이 아니기 때문에 다음을 사용하는 것이 좋습니다.python-pypi-미러:

1- 인터넷에 연결된 서버에 pip를 사용하여 python-pypi-mirror를 설치합니다.

2- 이 서버에 http.server Python 모듈을 설치합니다.

3- pip 패키지를 서버할 디렉터리를 만듭니다.

4- python-pypi-mirror를 사용하여 최근 생성되어 http 서버로 노출된 디렉터리에 필요한 패키지를 다운로드합니다(모든 종속성을 포함합니다).

5- 필요한 패키지를 원격으로 설치합니다.

 pip3 install --trusted-host <http_server> -i http://<http_server>:<http.server_default_port>/simple <package_name>

여기에서 필요한 모든 지침을 찾을 수 있습니다.

관련 정보