所以我希望为我的项目在本地下载 Flask(和所有其他依赖项)。我使用以下代码执行此操作:
pip install -t lib Flask
这可以正常工作并执行。其结果保存在lib
目录中。但是,当尝试从 导入 Flask 时lib.Flask
,会出现此错误:
ModuleNotFoundError: No module named 'jinja2'
我知道 Flask 依赖于这个库,但它是用上面的命令和 Flask 一起安装的。换句话说,jinja2
是在lib
目录中。
为什么我收到这个错误?我该如何解决?
当你在 python 中导入一个模块时,python 做的第一件事就是在你的直接目录中查找它,然后如果它在那里找不到它它在 python 的全局 lib 安装路径中搜索它,然后如果它在那里找不到它要么抛出一个错误
在python中还有一个叫做relative和global import的东西,我很确定Flask
两者都使用(相对于模块内部的自身,以及外部依赖的全局)
为了让您在本地存储Flask
工作,您要么需要让 python 认为它是其全局模块索引的一部分,要么Flask
手动将所有全局导入修复为相对的外部依赖项
编辑:
例如你有一个 lib 文件夹:
lib/
foo/ # module
bar/ # module
spam/ # module
让python将它们视为其全局(用户/系统范围)模块索引的一部分的最懒惰的方法是将它们中的每一个添加到 PATH
在此示例中,您添加的内容PATH
如下所示:
full/path/to/lib/foo
让pythonfoo
从这个lib
文件夹中看到一个模块
如果你想蟒蛇识别bar
和spam
太,你需要添加它们都以同样的方式
EDIT2:懒惰的方式第 2 部分
假设您有一些具有依赖项的模块,并且它们都在某个文件夹中:
lib/
lol/ # module, its just here
foo/ # module, bar needs this
bar/ # module, spam needs this
spam/ # module, you only need this
再次让pythonlib
作为其全局(用户/系统范围)模块索引的一部分查看的最懒惰的方法是将lib
文件夹添加到PATH
你可以从 python 本身做到这一点:
>>> import sys
>>> sys.path.append('/full/path/to/your/lib')
>>> import spam # now this will work, any other module from lib/ will work too
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句