在尝试运行algolia fork of the mongo_connector时,我遇到了将algolia doc manager选为内部模块的问题。在我看来,其他人都依赖于将文档管理器添加为外部源代码,尽管实际上并不是必需的。
要安装,我已创建此requirement.txt
:
algoliasearch==1.5.0
elasticsearch==0.4.5
pymongo==2.8
pysolr==3.3.0
requests==2.5.1
urllib3==1.10
wsgiref==0.1.2
git+https://github.com/algolia/mongo-connector.git
并使用sudo pip install -r requirements.txt
安装。
然后运行它:
mongo-connector -m mongodb://localhost:5001/meteor -n meteor.items -t credentials-etc:items -o items.txt -d doc_managers/algolia_doc_manager
给我:
Traceback (most recent call last):
File "/usr/local/bin/mongo-connector", line 9, in <module>
load_entry_point('mongo-connector==1.3.dev0', 'console_scripts', 'mongo-connector')()
File "build/bdist.linux-x86_64/egg/mongo_connector/connector.py", line 720, in main
File "build/bdist.linux-x86_64/egg/mongo_connector/connector.py", line 77, in __init__
File "build/bdist.linux-x86_64/egg/mongo_connector/connector.py", line 64, in load_doc_manager
IOError: [Errno 2] No such file or directory
尝试修复它,我查看了它失败的来源:
def load_doc_manager(path):
name, _ = os.path.splitext(os.path.basename(path))
try:
from importlib.machinery import SourceFileLoader
loader = SourceFileLoader(name, path)
module = loader.load_module(name)
except ImportError:
module = imp.load_source(name, path)
return module
因此,当path
为doc_managers/algolia_doc_manager
时,为什么imp.load_source()
无法在文件存在时找到它?可能是因为包安装为.egg文件?还尝试与其他文档管理员一起运行,结果相同。
只有当我向doc-manager提供绝对URL时,它才有效。
答案 0 :(得分:1)
我最终以编程方式解析文档管理器路径
import mongo_connector.doc_managers.algolia_doc_manager as doc_manager
import os.path as path, sys
sys.stdout.write(path.join(path.dirname(doc_manager.__file__),'algolia_doc_manager.py'))