2014-12-13 4 views
4

배포 용으로 파이썬 패키지를 설정하려고합니다. 나는 전에 이것을 해본 적이 없기 때문에 모범 사례에 대해 꽤 흐릿 해졌고, 심지어 일을 어떻게 만들지도 모르고 문제가 발생했습니다. 프로젝트 구조는 다음과 같습니다.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 디렉토리에서 찾고 있지 않습니다. distutilsfindallos.walk을 사용하지 않았습니다. 대신 자신의 디렉토리 워킹 코드가 있습니다. 변경 내역에서 distutilsfindall이 깨진 기호 링크에 문제가있는 것처럼 보입니다. os.walk(dir, followlinks=True)을 사용하는 것만으로도 충분했지만 어쩌면 그게 왜 나쁜 생각인지 몇 가지 이유가 있었을까요?

그래서 나는 고생하고있다. 내가 싫어하는 내 프로젝트의 구조를 변경하거나 distutilssetuptools 내부와 혼란에 빠지면 잠재 고객이 훨씬 행복해집니다.

제안 사항?

답변

0

귀하의 질문이있는 시점에 이것은 분명히 fixed in the repository입니다 (수정본이 널리 퍼지기에는 너무 이르다).

해당 문제는 this one입니다.

고정 된 setuptools 패키지의 관련 버전 태그는 8.0.2입니다.