2013-11-01 1 views
7

파이썬 모듈 중 하나에서 main 메소드의 진입 점을 만들려고합니다. 해당 함수가있는 모듈을 가져 오는 데 문제가있는 것 같습니다.파이썬에서 load_entry_point 중에 모듈을 찾을 수 없습니다.

... 
setup(name="awesome-tool", 
     ..., 
     entry_points={ 
      'console_scripts' : [ 
       'awesome-tool = awesome_tool.awesome_tool:main' 
      ] 
     } 
) 

이 프로젝트는 다음과 같이 구성되어 있습니다 :

내 setup.py은 다음과 같습니다

awesome_tool 
    |__ awesome_tool.py 
    |__ __init__.py 

내가에서 사용할 수 있도록 할 주()라는 함수를 포함 awesome_tool.py있어 실행 파일은 awesome-tool입니다. setup.py를 실행하면 모든 것이 잘된 것처럼 보입니다. 나는 파이썬 프롬프트를 시작하고

> import awesome_tool.awesome_tool 
> # (all good here) 

을하지만 명령 줄에서 awesome-tool를 호출 할 때,이 일이 무엇인가 할 수

Traceback (most recent call last): 
    File ".../virtualenvs/awesome-tool/bin/awesome-tool", line 9, in <module> 
    load_entry_point('awesome-tool==1.1.0', 'console_scripts', 'awesome-tool')() 
    File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 378, in load_entry_point 
    return get_distribution(dist).load_entry_point(group, name) 
    File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 2566, in load_entry_point 
    return ep.load() 
    File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 2260, in load 
    entry = __import__(self.module_name, globals(),globals(), ['__name__']) 
ImportError: No module named awesome_tool.awesome_tool 

무엇입니까? 방금 파이썬 셸에서 가져올 수 없었습니까? 파이썬 경로에서 재미있는 일이있을 것이라고 생각하지만 문제를 진단 할 수 없었습니다. 어떤 아이디어?

setup.py에서 제공하는 awesome-tool 실행에 문제가있는 줄

다음과 같은 것 같다 : 또한

from pkg_resources import load_entry_point 
load_entry_point("awesome-tool==1.1.0", "console_scripts", "awesome-tool")() 

, 나는 그것이 패키지와 모듈의 주 같은 이름 ("awesome_tool"모두가 매우 이상한 실현),하지만 이것은 내가 상속 한 코드이며, 이름 바꾸기와의 하위 호환을 중단하고 싶지는 않습니다.하지만 나중에 피할 수는 있습니다. 가능하면 이름을 지금과 같은 방식으로 유지하고 싶습니다.

+0

가 어떻게 "명령 줄에서'최고-tool'를 호출"합니까? 그렇게 할 때 현재 작업 디렉토리는 무엇입니까? 파이썬을 실행할 때 작업 디렉토리는 무엇입니까? – abarnert

+0

패키지 내용 (즉, awesome_tool/..')과 같은 위치에있는 파이썬 인터프리터 위의'awesome-tool' 디렉토리 하나를 호출하지만 다른 디렉토리로'cd' 할 때 파이썬 인터프리터를 다시 시도합니다 , 나는'ImportError'를 얻는다. 그게 진전이야! 고맙습니다. – llovett

답변

2

어떤 방식 으로든 패키지를 설치하지 않은 것 같습니다. 따라서 현재 작업중인 디렉토리 나 sys.path에 추가 한 다른 디렉토리에 앉아있는 것이 좋습니다.

"명령 줄에서 awesome-tool을 어떻게 호출 할 지 말씀 드리지는 않았지만 다른 작업 디렉토리에서 수행하고있는 것 같습니다. 예를 들어

:

$ cd ~/virtualenvs/awesome-tool 
$ python 
>>> import awesometool.awesometool 
>>> ^D 
$ cd .. 
$ python 
>>> import awesometool.awesometool 
ImportError: No module named awesome_tool.awesome_tool 
$ cd awesome-tool 
$ python ./bin/awesome-tool 
<everything works> 
$ cd bin 
$ python awesome-tool 
ImportError: No module named awesome_tool.awesome_tool 
+0

'setup.py'를 실행했는데, 좀 더 꼼꼼히 살펴보면 패키지가'awesome-tool' (이것은 importable ...이 아닙니다)라는'site-packages'에 설치되고 있음을 알 수 있습니다. 이 질문에서 표현 된 문제의 근원은 패키지 위의 디렉토리에서 파이썬을 호출하면 패키지가 올바르게 설치되지 않은 것처럼 보이게 만드는 것입니다. 고맙습니다. – llovett

+0

@llovett : 예, 패키지 및 모듈 파일 이름은 유효한 식별자 여야합니다. 그렇지 않으면 매우 유용하지 않습니다. 일반적인 트릭은 식별자가없는 모든 문자에 '_'을 사용하는 것입니다. 예를 들어,'pip install more-itertools config-tree'를 실행 한 후에'more_itertools, config_tree'를 가져올 수 있습니다. 필자는 이것이 [Distributing Python Modules] (http://docs.python.org/3/distutils/index.)의 어딘가에서 논의되었다고 생각합니다.html) 문서 또는 Hitchhikers 'Guide to Packaging을 사용하지만, 내가 아는 모든 사람들은 처음에는 긴 이름의 패키지를 만들 때 그 문제에 물 렸습니다. – abarnert

+0

나는 비슷한 문제가있어서 실제로 패키지를 설치하지 않았다. 'pip install '을 실행하면 나를 위해 그것을 고쳤습니다. – wulfgarpro

관련 문제