2013-06-03 3 views
0

일부 가져 오기 문제로 인해 설치된 Python 스크립트를 실행하는 데 문제가 있습니다. 다음과 같이설치된 스크립트를 실행할 때의 Python ImportError

나는 패키지 구조를 가지고 :

MANIFEST.in 
setup.py 
bin/opal.py 
bin/opal/ 
    /__init__.py 
    /__init__.pyc 
    /core.py 
    /core.pyc   
    /io.py 
    /file.py 
    /import_limesurvey.py 
    /dictionary.py 
    /io.pyc 
    /importer.pyc 
    /data.py 
    /rest.py 

rest.py이 거기에 하나 개의 클래스 :

class OpalRestCommand: 
    ... 

opal.py 파일은 다음과 같은 방법으로이 모듈을 사용

:
import opal.rest 
... 
restCmd = opal.rest.OpalRestCommand() 

이 는 설치 정의입니다

... 
setup_args = get_kw(
    name=PACKAGE_NAME, 
    version=VERSION, 
    author=AUTHOR, 
    author_email=AUTHOR_EMAIL, 
    maintainer=MAINTAINER, 
    maintainer_email=MAINTAINER_EMAIL, 
    url=URL, 
    license=LICENSE, 
    description=DESCRIPTION, 
    long_description=DESCRIPTION_LOG, 
    platforms=PLATFORMS, 
    packages = ['opal', 'opal.protobuf'] 
    package_dir = {'opal': 'bin/opal'} 
    scripts=['bin/opal.py'] 
) 

... 

if __name__ == '__main__' 
    # do some manipulation with argv 
    apply(setup,(), setup_args) 

내가 클라이언트 시스템 (MAC)에이를 설치하고 opal.py 명령을 실행하면 항상 오류 얻을 : 나는 나머지 모듈을 사용하는 테스트 프로그램을 작성하는 경우, 그러나

ImportError: No module name rest 

을 나는 수입 문제가 없다. 나는 파이썬의 초보자입니다. 설치 스크립트에 특별한 것을해야하는지 모르겠습니다! 나는 opal.py 스크립트가 테스트 프로그램과 같은 방식으로 나머지 모듈을 찾아야한다고 생각했다.

도움이 될 것입니다.

건배.

+0

'opal' 디렉토리에'__init __. py'가 있습니까? – SethMMorton

+0

예, 패키지 폴더에 '_____init_____.py'이 있습니다. – user2449584

+0

모듈에'rest.py'가 설치되어 있습니까? – SethMMorton

답변

0

나는 파이썬 가져 오기 경로를 제대로 준수하지 않는다는 것을 깨닫기 전에 내 자신의 프로젝트에서이 문제를 해결하기 위해 약간의 시간을 보냈다.

실행중인 스크립트의 이름이 네임 스페이스의 루트와 일치하면 네임 스페이스 문제가 발생합니다. opal.py가 opal/init .py와 충돌합니다. 당신도 setuptools를 사용할 때 이런 일이 발생할 수 있습니다.

SITEPACKAGES =/usr/lib/pythonX.Y/site-packages라고 가정하면 패키지는 $ SITEPACKAGES/opal- $ version.egg에 설치되고 스크립트는 $ SITEPACKAGES/opal- $ version.egg에 설치됩니다 EGG-INFO/bin /에있는 스크립트를로드하는/usr/local/bin에 추가 된 파일과 함께 /EGG-INFO/bin/opal.py. 스크립트가로드 될 때 작은 문제가 있습니다.

python 경로에는 $ SITEPACKAGES/opal- $ version.egg/EGG-INFO/bin /이 포함됩니다. 수입업자가 opal 내에서 무엇이든 가져 오기를 시도하면 $ SITEPACKAGES/opal- $ version.egg/opal /에있는 모듈이 아니라 실행중인 스크립트를 가져옵니다. 이는 스크립트 이름과 패키지에 구현 된 네임 스페이스 간의 충돌로 인해 발생합니다.

패키지의 네임 스페이스를 변경하거나 명령 줄 스크립트 이름을 변경해야합니다.

관련 문제