Python 谷歌应用引擎-如何添加库文件夹?
我一直在担心:在我的lib模块中没有名为twitter的模块 详情:Python 谷歌应用引擎-如何添加库文件夹?,python,google-app-engine,twitter,Python,Google App Engine,Twitter,我一直在担心:在我的lib模块中没有名为twitter的模块 详情: twitter模块位于lib目录中 lib目录有一个空的init.py 我在目录外的一个页面上得到了错误 当我从lib目录中取出twitter模块并只说importtwitter时,它就工作了 当我把twitter模块放回lib中,说from lib import twitter,或者说import twitter,或者说import lib.twitter时,它会说,转到****并喜欢它 我试着这样做:,这表明: 要告诉应用
from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')
然后尝试导入推特,然后尝试从lib导入推特,它说,“哈哈,很好的尝试。”
现在怎么办;博士——评论是对的。”“lib”不是一个模块,它是一个包含模块的文件夹。在使用
vendor.add('lib')
导入twitter之前,它需要位于Python导入路径上,这应该在部署或使用dev_appserver.py时正确设置导入路径。如果您将vendor.add(lib)
代码段放入appengine\u config.py
文件并运行dev\u appserver.py或deploy,并且twitter模块位于lib
中,您应该能够导入twitter
。如果您在appengine/devappserver之外运行,则需要确保PYTHONPATH上有lib
下面是关于lib
文件夹的详细说明;什么是自动售货机;以及它们如何适应管理应用程序引擎依赖关系的大局
使用App Engine,您可以在App.yaml中指定沙盒提供的一些依赖项。您可以查看可用库的列表。对于任何其他依赖项(只能是纯Python库),库需要直接包含在项目中。直接将这些依赖项的代码作为项目的一部分(而不仅仅是在requirements.txt中列出它们并期望它们在部署时安装)通常称为“vendoring”
现在,即使我们直接包含依赖项,我们还是宁愿使用pip和requirements.txt,原因如下。但pip通常用于安装到系统库或virtualenv的库中,而不是安装到项目本身中。因此,pip中添加了一个功能,App Engine中添加了一个功能来修复此问题
pip功能将依赖项安装到文件夹中,而不是系统库或virtualenv中。您可以这样使用-t标志:
pip install -r requirements.txt -t lib
其中“lib”是要安装到的文件夹。这样,您仍然可以在requirements.txt中指定依赖项,并使用pip安装它们,它们只需直接安装到指定的目录中即可。正如注释所指出的,lib文件夹本身不是一个模块,它只是包含它们。所以你的lib文件夹不应该有一个\uuuu init\uuuuuuuuuuuuuupy
,它应该只包含一个像“twitter”这样的文件夹,它有一个\uuuuuuuuuuuuuuuuuuuuu init.py
。由于lib
不是一个模块,因此lib import twitter的实际上没有意义。还要注意的是,lib
是一个任意名称,但我们通常按照惯例选择这个名称
使用pip而不仅仅是手动下载依赖项并将它们添加到项目中,这有一些很大的优势。一个优点是您不需要将依赖项检查到源代码管理中,只需添加requirements.txt,并告诉其他用户也使用pip-t
命令来提供依赖项。另一个优点是,它更加有条理,可以将代码与第三方模块清晰地分开。供应商特性的要点是保持这些优势,同时仍然遵循应用程序引擎的要求,在部署时将依赖项包括在目录中
您正在使用的App Engine供应商扩展用于识别文件夹中包含已“出售”的模块,并将其添加到路径中。这是您在代码段中使用的供应商扩展。它确保lib
文件夹位于您的导入路径上,以便您可以将安装的模块导入其中
运行vendor.add命令后,您应该能够在lib文件夹中导入模块。如评论所述,您需要确保它在导入twitter之前运行。一个好的做法是确保这些供应商命令在其他命令之前运行。您可以通过将代码放入目录中名为的文件中来实现这一点。这是一个特殊的文件,它比其他任何文件都要先运行。请看一个这样做的例子
最后几点提示可能会有所帮助:
appengine\u config.py
将在GAE环境中运行,或者在运行模拟GAE环境的dev\u appserver时运行。但是,如果您在GAE环境之外运行,请确保PYTHONPATH包含要从中导入的lib
文件夹
- 既然您可以使用pip创建供应商库,您可能会问,为什么要使用app.yaml包含依赖项?答案是,因为只有纯Python库可以出售,所以对于任何需要C库的库,如MySQL,您仍然应该使用app.yaml依赖项李>
- 如果您有供应商库和app.yaml库,则不希望供应商库位于GAE沙箱中,因为版本可能会冲突。在这种情况下,最好为要提供的依赖项和仅在本地运行时才包含但GAE将在沙箱中提供的依赖项单独设置requirements.txt。是MySQL的一个例子
tl;博士——评论是对的。”“lib”不是一个模块,它是一个包含模块的文件夹。这是必须的