2013-04-23 4 views
0

스크립트를 실행할 때 이상한 문제가 발생하여 pymongo을로드 할 수 없지만 hashbang 인터프리터 (/usr/bin/env python)를 실행하면 사용할 수 있습니다.모듈은 콘솔에서 가져올 수 있지만 스크립트에서는 가져올 수 없습니다.

원래 전화 import pymongo은 수업에 상당히 깊숙이 묻혀 있었지만 1 번째 줄에서 호출해도 실패합니다.

왜 이런가요? 여기

# /usr/bin/env python 
Python 2.7.4 (default, Apr 23 2013, 14:02:51) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pymongo 
>>> 

스크립트 여기

# head -n 3 ./app/app.py 
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import pymongo 

의 처음 세 줄 수있는 실패한다 :

# python ./app/app.py 
Traceback (most recent call last): 
    File "./app/app.py", line 3, in <module> 
    import pymongo 
ImportError: No module named pymongo 
여기

pymongo를 도시 파이썬 콘솔 일부 출력이 가능하다

하지만 /usr/bin/env으로 실행해도 괜찮습니다 ... 왜?

# /usr/bin/env python ./app/app.py 
Traceback (most recent call last): 
    File "./app/app.py", line 37, in <module> 
    db = backend.flowbackend.getBackendObject(config.db_backend, config.db_host, config.db_port, config.db_user, config.db_password, config.db_name) 
     File "./app/../lib/backend/flowbackend.py", line 268, in getBackendObject 
    return MongoBackend(host, port, user, password, databaseName) 
    File "./app/../lib/backend/mongobackend.py", line 13, in __init__ 
    self.connect() 
    File "./app/../lib/backend/mongobackend.py", line 62, in connect 
    self.conn = pymongo.Connection(self.host, self.port) 
    File "/usr/local/lib/python2.7/site-packages/pymongo/connection.py", line 220, in  __init__ 
    max_pool_size, document_class, tz_aware, _connect, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/pymongo/mongo_client.py", line 336, in  __init__ 
    raise ConnectionFailure(str(e)) 
pymongo.errors.ConnectionFailure: could not connect to 127.0.0.1:27017: [Errno 111]  Connection refused 
+0

파이썬은'sys.path'에 나열된 장소에서 모듈을 찾습니다. 어쩌면이 변수를 두 경우 모두 비교하면 도움이됩니다. –

+1

아마 스크립트는'sys.path'를 수정합니까? – mata

+2

대부분의 경우 컴퓨터에 여러 버전의 python이 설치되어 있습니다. 당신이 "원래"라고 부르는 것의 파이썬 경로는 아마도 해시 뱅 enterpreter가 가지고있는 것과 같은 파이썬이 아닐 것입니다. –

답변

0

홈 디렉토리에서 .pythonrc를 확인하십시오. 콘솔은 스크립트를 실행하지만 스크립트는 실행하지 않습니다. 지금 당장 생각할 수있는 유일한 방법입니다. 어쩌면 pymongo에 액세스 할 수 있도록 sys.path를 설정합니다.

대화 형 인터프리터를 시작한 사용자와 동일한 스크립트를 실행하려고한다고 가정합니다. 그렇지 않다면, 그것은 또한 원인이 될 수 있습니다.

+0

답변 해 주셔서 감사합니다. '/ usr/bin/env python'을 실행했을 때'pymongo'를 사용할 수 있다는 것을 보여주는 원본 게시물을 업데이트했습니다. 그것은 나를 이상하게 여긴다. 그러나 나는 그것이해야하는 것처럼'env'를 이해하지 못할지도 모른다는 것을 보여준다. – mbrownnyc

0

런 중 /usr/bin/python은 2.6.6이었고, /usr/local/bin/python은 2.7.4이었다. pip-python/usr/bin/python에 영향을 미치고 있습니다.

# pip-python -E /usr/local/bin/python freeze 
distribute==0.6.10 
iniparse==0.3.1 
pycurl==7.19.0 
pygpgme==0.1 
urlgrabber==3.9.1 
wsgiref==0.1.2 
yum-metadata-parser==1.1.2 

# pip-python install pymongo 
... 

# pip-python -E /usr/local/bin/python freeze 
distribute==0.6.10 
iniparse==0.3.1 
pycurl==7.19.0 
pygpgme==0.1 
pymongo==2.5 
urlgrabber==3.9.1 
wsgiref==0.1.2 
yum-metadata-parser==1.1.2 

# pip-python -E /usr/bin/python freeze 
distribute==0.6.10 
iniparse==0.3.1 
pycurl==7.19.0 
pygpgme==0.1 
pymongo==2.5 
urlgrabber==3.9.1 
yum-metadata-parser==1.1.2 

두 인스턴스 모두 동일한 libs을 참조해야합니다. 알았어 ...

+0

나는 이것을 정말로 이해하지 못한다. 터미널에서'/ usr/bin/env python'을 실행하면 다른 파이썬 실행 파일이 실행되어 터미널에서'python'을 실행한다고 말하는 것입니까? 그것은 나에게 놀라운 일이다. –

0

나는 pyserial과 같은 문제가 있지만 제 경우에는 스크립트 파일에 serial.py라는 이름이 붙어있어서 시리얼을 가져 오려고하면 패키지를 인식하지 못합니다. 파일 이름을 바꾸면 문제가 없습니다.

관련 문제