1

スクリプトを実行すると奇妙な問題が発生します。ロードできませんpymongoが、hashbang インタープリターを実行すると使用可能になります ( /usr/bin/env python)。

元の呼び出しimport pymongoはクラスの奥深くに埋もれていましたが、1 行目で呼び出しても失敗します。

どうしてこれなの?

利用可能であることを示す python コンソールからの出力を次に示しpymongoます。

# /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
>>> 

スクリプトの最初の 3 行を次に示します。

# 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

しかし、実行しても問題あり/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
4

3 に答える 3

0

ホームディレクトリの .pythonrc を確認してください。コンソールはそれを実行しますが (存在する場合)、スクリプトは実行しません。今思いつくのはそれしかない。おそらく、pymongo にアクセスできるように sys.path を設定します。

スクリプトを実行しようとしているのは、対話型インタープリターを起動したユーザーと同じだと思います。そうでない場合は、それも原因の可能性があります。

于 2013-04-23T20:02:36.303 に答える
0

ランニング/usr/bin/pythonは2.6.6で/usr/local/bin/python2.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。じゃ、いいよ...

于 2013-04-25T19:15:37.237 に答える