이것은 나 자신을 한 번 경험 한 문제입니다. 그 루트는 휠 파일을 만들 때 data_files
에 지정된 모든 절대 경로가 대상 site-packages
디렉토리로 상대화됩니다 (this issue on github 참조).
$ pip install spam-0.1.tar.gz
Processing ./spam-0.1.tar.gz
Building wheels for collected packages: spam Running setup.py bdist_wheel for spam ... done
Stored in directory: /Users/hoefling/Library/Caches/pip/wheels/d0/95/be/bc79f1d589d90d67139481a3e706bcc54578fdbf891aef75c0
Successfully built spam
Installing collected packages: spam
Successfully installed spam-0.1
확인 설치된 파일의 수율 :
$ pip show -f spam
Name: spam
Version: 0.1
...
Location: /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages
Requires:
Files:
Users/hoefling/.my_config
spam-0.1.dist-info/DESCRIPTION.rst
spam-0.1.dist-info/INSTALLER
spam-0.1.dist-info/METADATA
spam-0.1.dist-info/RECORD
spam-0.1.dist-info/WHEEL
spam-0.1.dist-info/metadata.json
spam-0.1.dist-info/top_level.txt
참고이 결과 바퀴는 모든 소스 패키지 (.tar.gz
, .tar.bz2
또는 .zip
) 중 바퀴를 구축 할 예정으로 pip install
에 의해 수행 설치에 영향을 미친다 설치 절대 경로는 Location
디렉토리와 관련이 있습니다. 이 예에서 .my_config
은 /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/Users/hoefling/.my_config
아래에 배치됩니다.
내장 휠이 디스크에 캐시되어있어 다음 번에 패키지를 다시 설치하면 내장 휠이 pip
의 캐시에 계속 남아있어 설치에 사용되며 더 이상 설치되지 않습니다. 터미널 로그에 휠을 만드는 것에 대한 언급을 참조하십시오.
이를 피하기위한 실제 해결책은 없습니다. 파일이 올바르게 배치
$ pip install spam-0.1.tar.gz --no-binary=spam
Processing ./spam-0.1.tar.gz
Skipping bdist_wheel for spam, due to binaries being disabled for it.
Installing collected packages: spam
Running setup.py install for spam ... done
Successfully installed spam-0.1
:
$ pip show -f spam
Name: spam
Version: 0.1
...
Location: /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages
Requires:
Files:
../../../../../.my_config
spam-0.1-py3.6.egg-info/PKG-INFO
spam-0.1-py3.6.egg-info/SOURCES.txt
spam-0.1-py3.6.egg-info/dependency_links.txt
spam-0.1-py3.6.egg-info/top_level.txt
불행하게도, 사용자 내가 찾은 가장 괜찮은 해결 방법은 설치에 패키지의 setup.py
의 실행을 시행 설치할 때 "바이너리"패키지를 금지하는 것입니다 패키지 메타 데이터에서 바퀴를 만들지 못하게 할 수 있으므로 pip install
에 추가 키 (readme, 웹 페이지 FAQ 등을 통해)를 호출하는 것에 대해 별도로 알려야합니다.
그 결과 절대 경로가 포함 된 파일을 더 이상 포함하지 않습니다. 대신, 파이썬 소스를 site-packages
디렉토리에 설치합니다. 파이썬 코드에서 필요한 경우 존재 체크와 파일 복사를위한 추가 로직을 추가해야합니다 :
# program entrypoint
if __name__ == '__main__':
config = os.path.join(os.path.expanduser('~'), '.my_config')
if not os.path.exists(config):
shutil.copyfile('.my_config', config)
main.run()
감사합니다 : pip'는 업그레이드 할 때 잘못된 것을 수행하고 기존의 dotfile을 자동으로 덮어 씁니다. – Xophmeister