我一直在强调:在我的lib模块中没有名为twitter的模块
详细信息:
- twitter模块位于lib目录中。在
- lib目录有一个空的init.py
- 我在目录外的一个页面上得到了错误
- 当我把twitter模块从lib目录中取出并说importtwitter时,它就起作用了
- 当我把twitter模块放回lib中并说from lib import twitter,或者说import twitter,或者说importlib.twitter网站上面写着,去****并喜欢它
- 我试着这样做:https://cloud.google.com/appengine/docs/python/tools/libraries27?hl=en,这意味着:
若要告诉应用程序如何在此目录中查找库,请创建(或修改)名为appengine的文件_配置.py在项目的根目录下,添加以下行:
from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')
然后尝试导入twitter,并尝试从lib导入twitter,结果显示,“哈哈,不错的尝试。”
现在呢?在
Tags:
tl;dr—评论是正确的。”lib'不是模块,而是包含模块的文件夹。它需要在Python导入路径上前面的
import twitter
,使用vendor.add('lib')
,当您部署或使用dev时,它应该正确地设置导入路径_应用服务器.py. 如果您将vendor.add(lib)
代码段放在appengine_config.py
文件中并运行dev_应用服务器.py或者部署,twitter模块在lib
内,您应该能够import twitter
。如果您在appengine/devappserver之外运行,则需要确保lib
位于PYTHONPATH上。在以下是对
lib
文件夹是什么、什么是vendoring以及它们如何适应管理App Engine依赖关系的更大范围的解释。在使用App Engine,可以指定中的沙盒提供的一些依赖项应用程序yaml. 您可以查看可用库的列表here。对于任何其他依赖项(只能是纯Python库),这些库需要直接包含在项目中。直接将这些依赖项的代码作为项目的一部分(而不仅仅是将它们列在要求.txt并且期望它们在部署时安装)通常被称为“vendoring”。在
现在,尽管我们直接包含了依赖项,但我们宁愿使用pip和a要求.txt,原因如下。但是pip通常用于安装到系统库或virtualenv的库中,而不是项目本身。因此,pip中添加了一个特性,appengine中也添加了一个特性来解决这个问题。在
pip特性将依赖项安装到文件夹中,而不是系统库或virtualenv。您可以这样使用-t标志:
其中“lib”是要安装到的文件夹。这样,仍然可以在中指定依赖项要求.txt,并使用pip安装它们,它们只需直接安装到指定的目录中。它本身并不是一个包含注释的模块。所以你的lib文件夹不应该有一个
__init__.py
,它应该只包含一个像'twitter'这样有一个__init__.py
的文件夹。由于lib
不是模块,from lib import twitter
实际上没有意义。还要注意,lib
是一个任意的名称,但是我们通常是按照惯例选择的。在使用pip而不是手动下载依赖项并将其添加到项目中,这有一些很大的优势。一个优点是不需要将依赖项检查到源代码管理中—只需添加要求.txt,并告诉其他用户使用
pip -t
命令来提供依赖项。另一个优点是它更具组织性,可以将代码与第三方模块清晰地分开。vendoring特性的要点是保持这些优势,同时仍然遵循appengine的要求,以便在部署时将依赖项包含在目录中。在您正在使用的App Engine供应商扩展是为了识别文件夹包含已“vendor”的模块,并将其添加到路径中。这是您在代码片段中使用的供应商扩展。它确保
lib
文件夹在导入路径上,这样您就可以导入安装到其中的模块。在一旦你运行供应商.add命令,您应该能够导入lib文件夹中的模块。正如注释所述,您需要确保它在
import twitter
之前运行。一个好的做法是确保这些供应商命令在其他命令之前运行。您可以通过将代码放在目录中名为appengine_config.py的文件中来实现这一点。这是一个特殊的文件,运行在任何其他文件之前。看一个这样做的例子here。在最后几点可能有用的提示:
appengine_config.py
将在GAE环境中运行,或者当您运行模拟GAE环境的dev_appserver时运行。但是,如果您在GAE环境之外运行,请确保PYTHONPATH包含lib
文件夹您要从导入。在from google.appengine.ext import vendor vendor.add('libs')
这些会上传到你的应用引擎环境,你就可以运行它了!在
相关问题 更多 >
编程相关推荐