2017-11-13 16 views
0

나는 this guide에 따라 사용자 정의 파이썬 패키지를 만든, 그래서 나는 다음과 같은 구조를 가지고 :현재 작업 디렉토리가 setup.py의 설치 경로에 영향을 미치는 이유는 무엇입니까? 어떻게 방지 할 수 있습니까?

mypackage/  <-- VCS root 
    mypackage/ 
    submodule1/ 
    submodule2/ 
    setup.py 

을 그리고 setup.py는 가이드와 완전히 동일한 정보가 포함되어 내가 발견 한

from setuptools import setup, find_packages 

setup(name='mypackage', 
     version='0.1', 
     description='desc', 
     url='vcs_url', 
     author='Hodossy, Szabolcs', 
     author_email='[email protected]', 
     license='MIT', 
     packages=find_packages(), 
     install_requires=[ 
      # deps 
     ], 
     zip_safe=False) 

을 setup.py가있는 폴더로 가서 가상 환경에서 python setup.py install을 호출하면 사이트 패키지에서 다음 구조가 설치됩니다.

.../site-packages/mypackage-0.1-py3.6.egg/mypackage/ 
    submodule1/ 
    submodule2/ 

하지만 python mypackage/setup.py install 같은 하나의 폴더에서 위로를 호출하면, 그 구조는 다음과 같다 :

.../site-packages/mypackage-0.1-py3.6.egg/mypackage/ 
    mypackage/ 
    submodule1/ 
    submodule2/ 

이 나중에 한 유적 내 모듈의 모든 수입 경로가 서브 모듈에 대해 서로 다른 때문이다.

여기에서 무슨 일이 일어나고 있는지, 그런 종류의 행동을 방지하는 방법을 설명해 주시겠습니까?

이것은 Windows와 Linux에서 모두 Python 3.6에서 발생합니다.

답변

1

귀하의 setup.py는 경로를 포함하지 않지만 find_packages을 통해서만 파일을 찾을 수 있습니다. 물론 당신이 그것을 실행하는 곳에 따라 다릅니다. setup.py는 엄격하게 그 위치에 묶여 있지 않습니다. 물론 chdir과 같은 것을 sys.argv[0]에있는 설정 파일 경로의 basename에 넣을 수는 있겠지만 다소 엉망입니다.

질문은 왜 그런 방식으로 제작하고 싶은가요? 마치 구조체를 원하는 것처럼 보이게됩니다.

mypackage-source 
    mypackage 
    submodule1 
    submodule2 
    setup.py 

그런 다음 작업 디렉토리에서 setup.py를 실행하십시오. 당신은 어디에서 실행할 수 있도록하려면, 더 나은 해결 방법은 여기에 올바른 디렉토리 (로 변경하는 작업을 분리

#!/bin/sh 
cd ``basename $0`` 
python setup.py [email protected] 

처럼, 옆에 쉘 스크립트를 넣어 것 나는 디렉토리와 가정 setup.py를 실행하여 setup.py를 실행하지 마십시오.

+0

답변을 주셔서 감사합니다. find_packages를 사용하지 마십시오. 패키지가 일관성없이 설치됩니다. –

+0

필자는이 파일을 사용해야한다고 생각하지만 빌드를 시작한 디렉토리를 확인하십시오. 그것을 다른 방법으로 표현하기 위해 절대 경로를 지정하지 않으므로 모든 디렉토리에서 setup.py를 실행하고 거기에 패키지를 빌드 할 수 있습니다. 디렉토리 레이아웃이 다른 사람이 빌드하는 위치를 어떻게 알 수 없기 때문에 그 목적이 있습니다. 따라서 패키지는 현재 디렉토리에서부터 수집됩니다. 중복되는 것처럼 보이더라도 계층 구조에 하나의 하위 폴더가 있어야한다고 생각합니다. ''mypackage-source/mypackage/submodule1''과 같은 것 – allo