2017-12-13 56 views
0

나는 파이썬 모듈을 작성했다. 그것은 레포에 있습니다. 이제 모듈을 실행할 단위 테스트를 얻으려면 해당 모듈의 하위 폴더가 될 수 없습니다. 이 문제를 해결하기위한 권장 구조는 다음과 같습니다.다른 repo에서 파이썬 모듈 가져 오기

ModuleRepo/ 
    MyModule/ 
    __init__.py 
    some_utils.py 
     import .some_helpers 
    some_helpers.py 
    Tests/ 
    some_utils_test.py 
     import MyModule.some_utils 
    some_helpers_test.py 
     import MyModule.some_helpers 

이제 제대로 작동합니다. 테스트를 실행하면 모듈을 가져올 수 있습니다. 모듈은 미리 보류중인 '.'로 자신의 파일 (예 : some_helpers)을 가져올 수 있습니다. 로컬 폴더를 나타냅니다.

다른 레포가이 모듈을 공유하기를 원하며 모듈을 찾는 방법을 모르겠습니다.

예 :

ModuleRepo/ 
    MyModule/ 
    __init__.py 
    ... 
    Tests/ 
    ... 
AnotherRepo/ 
    using_my_module.py 
    import ??? <-- how to find MyModule? 

시도 # 1 작동하지 : 나는 자식의 서브 모듈의 기능을 사용 AnotherRepo에서 ModuleRepo을 포함하는 초기 시도 합니다. 그러나 실제로는 루트 폴더를 ModuleRepo에두고 싶지 않습니다. 하위 폴더 'MyModule'만 필요합니다. git의 하위 모듈은 그렇게하지 않는다는 것을 알 수 있습니다. 포함 할 repo의 일부만 선택할 수 없습니다.

불필요한 SYMLINK : 심볼릭 링크가 작동 할 수 있지만 리포지토리에 '커밋'할 수 없기 때문에 다소 바람직하지 않습니다. 또한 Windows와 Linux에서 모두 개발 중이므로 두 가지 모두에서 작동하는 솔루션이 필요합니다.

가능한 해결책 : ModuleRepo 루트를 모듈로 바꾸십시오 ( .py 추가). 그런 다음 git을 사용하여 AnotherRepo의 하위 모듈로 만들 수 있습니다. 내 가져 오기 못생긴하지만 그것은 될 것이다 : 가져 오기 my.module.some_utils 대신 가져 오기 mymodule.some_utils

누구 더 나은 솔루션을 가지고 있습니까?

+0

가장 좋은 방법은 분리 된 프로젝트를 만들고 PyPI 패키지를 만들어 의존성로 사용하는 것입니다. – manoelhc

답변

1

몇 가지 가능성.

  • 이 나열된 ModuleRepo 디렉토리를 만들기 위해 코드의 최상위 수준에 어딘가에 sys.path 변수를 조정할.

    이 접근법은 이 두 저장소를 서로 따로 가질 수있는 모든 솔루션과 함께 작동합니다. 즉, 서브 모듈 또는 하위 트리 병합 일 수 있습니다.

    코드의 테스트 단위 using_my_module.py에서이 조정을 반복해야한다는 단점이 있습니다.

  • 개발을 위해 virtualenv을 사용하십시오.

    프로젝트의 개발 환경을 설정하는 부분 은 "MyModule"을 "일반적인 방법"으로 설치합니다.

  • 은 "인 MyModule"모듈은 플럭스에없는 및/또는 당신이 개발 수동 정기 법인이 "기본"코드베이스에 "인 MyModule"에 일어나고 괜찮아 경우, 당신이 그렇게 함께 갈 수 있습니다 git subtree splitgit subtree add 명령 (또는 후자의 "서브 트리 병합"대신에 )을 사용하여 "vendoring"이라고합니다. , 귀하의 경우, "인 MyModule"-

    는 기본적으로 git subtree split 명령은 REPO 호스팅 "인 MyModule" 지정된 접두사에서 파일을 만지지 만 커밋을 포함하는 합성 역사 그래프에서 추출물을 수행 할 수 있습니다 이고 git subtree add은 서브 그래프 을 다른 저장소의 지정된 접두사에 "하위 트리 병합"할 수 있습니다.

+0

sys.path를 조정하는 것이 가장 간단 할 수도 있습니다 (그리고 repo에 대한 커밋이기도합니다). 하위 트리 분할/추가가 나올 때 내 백업 계획이됩니다. 고맙습니다 – qeadz