找不到带 imp 的内部模块
Cannot find internal module with imp
在尝试 运行 algolia fork of the mongo_connector 时,我在选择 algolia 文档管理器作为内部模块时遇到了问题。在我看来,其他人都依赖于将文档管理器添加为外部来源,尽管确实没有必要。
为了安装,我创建了这个 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 文件?还尝试了 运行 其他文档管理器,结果相同。
只有当我向文档管理器提供绝对 URL 时,它才有效。
我最终像这样以编程方式解析了文档管理器路径
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'))
在尝试 运行 algolia fork of the mongo_connector 时,我在选择 algolia 文档管理器作为内部模块时遇到了问题。在我看来,其他人都依赖于将文档管理器添加为外部来源,尽管确实没有必要。
为了安装,我创建了这个 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 文件?还尝试了 运行 其他文档管理器,结果相同。
只有当我向文档管理器提供绝对 URL 时,它才有效。
我最终像这样以编程方式解析了文档管理器路径
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'))