2017-05-10 16 views
0

계란 파일로 배포되는 2 개의 Python 응용 프로그램을 제작합니다. 우리는 파이썬 2.5.4에서 수년 동안 제작했지만 현재 2.7.13까지 가져 왔습니다. 이 과정에서 2.7.13에 설치 한 후 2 개의 응용 프로그램 중 1 개가 이상한 동작을 보입니다.easy_install을 사용하여 난을 설치 한 후 모듈을 가져올 때 ImportError가 발생합니다.

달걀을 easy_install.exe 할 때, 어떻게 보이는지 모든면에서 성공적으로 보입니다. 그러나 Python 명령 줄에서 모듈을 가져 오려고하면 ImportError가 발생합니다.

이 문제에 대한 많은 이상한 일들이 있습니다

  • 이는 Windows에서 발생 - 모두 앱을 설치하고 이것은 우리의이 개 프로그램의 1 일 리눅스
  • 을 잘 실행 - 다른 하나는 실행 잘 사방
  • easy_install을 하지 Windows에서 설치 문제가있는 동안 전혀 불평하지
  • 계란 경로에 나타나지 않을 때 할 "수입 SYS/인쇄 sys.path에"
  • 이 site_packages의 p 번째 패키지 목록에 나타나지 않는 계란
  • 나는 전체 설치 및 윈도우 관리자로 테스트하고있어
  • , 그래서 내가 거기에 생각하지 않는다 권한 문제 일 수도 있음
  • 2.5에서 2.7로 갈 때 두 프로그램의 소스 또는 setup.py를 변경하지 않았습니다.
  • 설치에 대한 멋진 점은 없습니다. 가상 env는 없으며 전체 설치입니다. into site_packages

여기에 있습니다. 계란에 실패한 의 setup.py은 (모듈 이름으로 무고한 사람들을 보호하기 위해 foo는 변경) :

from setuptools import setup 

setup(name='foo', 
     description='Foo Module', 
     packages=['foo'], 
     entry_points = { 
     'console_scripts': [ 
      'foo = foo.foo:main', 
      ], 
     }, 
    ) 

을 그리고 여기에 작업 계란의 setup.py입니다 :

from setuptools import setup 

setup(name='bar', 
     description='Bar Tool', 
     packages=['bar', 'bar.hexes', 'bar.barlib'], 
     entry_points = { 
     'console_scripts': [ 
      'bar = bar.main:main', 
      ], 
     }, 
    ) 

모듈을 가져 오려는 순간까지 문제가 보이지 않으므로 어떻게이 문제를 디버깅 할 수 있습니까?

필자의 가장 큰 용의자는 setup.py의 console_scripts 섹션에있는 foo.foo 참조입니다. this problem에서 @joest가 준 응답과 다소 비슷하게 들립니다.

+0

계란을 전 세계적으로 설치하려고합니까?어쩌면 UAC이고 "관리자 권한으로"실행하지 않는 한 시스템 글로벌 디렉토리에 쓸 수있는 권한이 없을 수 있습니까? – yeputons

+0

예, 위에서 언급 한 것처럼 설치는 글로벌 site_packages에 대한 것이 었으며 설치 및 테스트 과정에서 관리자였습니다. 또한, 그것이 허가 사물이라면, 그것은 왜 다른 계란이 잘 작동 하는지를 설명하지 못할 것입니다. –

+1

왜 질문을 투표합니까? 질문을 향상시킬 수 있다면 어떻게 알려주십시오. –

답변

0

난에 __init__.py이 없으므로 foo 모듈을 가져올 수 없습니다. x64 빌드 머신이 알을 생성하는 동안 (xxx 빌드 머신은 그 단계를 건너 뛰고 깨진 달걀을 생성하는 반면, Creating missing __init__.py for foo 메시지를 볼 것입니다), x64 빌드 머신은 알을 생성하는 동안 자동으로 파일을 생성합니다. 이 달걀을 만드는 과정의 일부로 파이썬 그 자체와 필요한 모든 모듈을 빌드한다고 생각하면, 어떻게 동작이 다를 수 있는지는 알 수 없지만 그렇게 할 수는 있습니다.

방금 ​​foo 소스 디렉토리에 빈 __init__.py을 만들었으므로 이제 계란이 올바르게 빌드되고 올바르게 임포트됩니다.