배포 용으로 파이썬 패키지를 설정하려고합니다. 나는 전에 이것을 해본 적이 없기 때문에 모범 사례에 대해 꽤 흐릿 해졌고, 심지어 일을 어떻게 만들지도 모르고 문제가 발생했습니다. 프로젝트 구조는 다음과 같습니다.setuptools가 symlinks를 따르는 방법?
ROIWidgets/
MANIFEST.in
setup.py
setup.cfg
ROIWidgets/
__init__.py
static/
widgets/
js -> <symlink to folder containing JavaScript files>
정적 인 JS 파일이 문제입니다. 나는 distutils
로 시작했다. 나는 MANIFEST.in
에서이 라인을 포함 :
recursive-include static *
을 ... 그리고 그것은 JS가 패키지에 포함되는 원인. 좋은. 그런 다음 설치 스크립트에서 종속성을 자동으로 설치하도록하려면 distutils
대신 setuptools
을 사용해야한다고 읽었습니다. 그래서, 나는 바꿨다 : 나는 을 distutils
보다는 setuptools
에서 가져온다.
warning: no files found matching '*' under directory 'static'
을 ... 그리고 JS 파일은 배포판에 포함되지 않은 : 나는 setup.py sdist
을 말할 때 그러나 지금,이 라인은 출력에 나타납니다. 디버거와의 긴 세션이 끝난 후 setuptools/__init__.py
에 문제가 있습니다. 여기에 있습니다 :
def findall(dir = os.curdir):
"""Find all files under 'dir' and return the list of full filenames
(relative to 'dir').
"""
all_files = []
for base, dirs, files in os.walk(dir):
if base==os.curdir or base.startswith(os.curdir+os.sep):
base = base[2:]
if base:
files = [os.path.join(base, f) for f in files]
all_files.extend(filter(os.path.isfile, files))
return all_files
distutils.filelist.findall = findall # fix findall bug in distutils.
os.walk
기본적으로 symlink를 따르지 않습니다. 따라서 setuptools
버전 findall
은 내 js
디렉토리에서 찾고 있지 않습니다. distutils
findall
os.walk
을 사용하지 않았습니다. 대신 자신의 디렉토리 워킹 코드가 있습니다. 변경 내역에서 distutils
findall
이 깨진 기호 링크에 문제가있는 것처럼 보입니다. os.walk(dir, followlinks=True)
을 사용하는 것만으로도 충분했지만 어쩌면 그게 왜 나쁜 생각인지 몇 가지 이유가 있었을까요?
그래서 나는 고생하고있다. 내가 싫어하는 내 프로젝트의 구조를 변경하거나 distutils
및 setuptools
내부와 혼란에 빠지면 잠재 고객이 훨씬 행복해집니다.
제안 사항?