如何在 Google App Engine 中包含第三方 Python 库?

Posted

技术标签:

【中文标题】如何在 Google App Engine 中包含第三方 Python 库?【英文标题】:How to include third party Python libraries in Google App Engine? 【发布时间】:2013-01-28 20:09:18 【问题描述】:

如何在 Google App Engine 中添加非 Google 提供的第三方 Python 库?我正在尝试在 Google App Engine 中使用 BeautifulSoup,但无法这样做。但我的问题是针对我想在 Google App Engine 中使用的任何库。

【问题讨论】:

How do I manage third-party Python libraries with Google App Engine? (virtualenv? pip?) 的可能重复项 我刚刚在此处发布了对 OP 问题的更新答案:***.com/a/67863189/305689 【参考方案1】:

Google 为您的 GAE 项目中包含的第三方库提供了文档化方式。

请参阅"Adding Third-party Packages to the Application" section of the Libraries in Python 2.7 docs。

如果您想包含其他纯 python 第三方包,您可以通过设置 vendoring 来实现。供应商允许您将包安装到项目的子目录中并将它们包含在您的代码中。要使用供应商,请在项目的根目录中创建(或修改)appengine_config.py

from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')

然后将所有库的源代码放入 lib 目录中

> pip install beautifulsoup4 -t lib

所以你的项目目录结构是这样的:

project
- lib
  - bs4
- your_code.py

这将允许您项目的源文件导入库的包/模块,就好像它们已添加到您的 PYTHON_PATH 中一样。例如:

# file: your_code.py
import bs4  # no need for 'from lib import bs4'
# do stuff with bs4...

您还可以通过执行以下命令轻松安装 requirements.txt 文件中的所有内容

> pip install -t lib -r requirements.txt

【讨论】:

这个答案似乎比被接受的更好。谢谢杰西! 这为我工作了很长时间,但只是开始莫名其妙地失败。我现在得到'virtualenv:无法访问lib:没有这样的virtualenv或站点目录' @bgenchel @PrestonCrawford 你们中的任何一个人都能够解决您的问题吗?我从未见过virtualenv 错误,这种方法目前仍在为我工作。如果您仍然没有解决它,请发布一个新问题并将其链接到此处,我会尽力提供帮助。确保添加许多细节。 我想,发生在我身上的是我试图从 lib 作为一个包导入,不理解 vendor.add("lib") 意味着你可以访问里面的库,就好像它们是在你的 python 路径上。抛出错误是因为在我的需求文件上运行 pip install 后,我忘记在文件夹中放置一个 init.py 。感谢提供! 我是,我不是。我现在只通过 PyCharm 得到错误。试图解决这个问题。【参考方案2】:

实际上我认为this answer 更适合这里。

如果您想使用this list 中未包含的第 3 方库,则必须手动添加它们。

为了手动包含任何其他库,您必须将它们放在app.yaml 所在的目录中。因此,例如,如果您具有以下结构:

hello
├── libs
│   └── bs4 
├── hello.py 
└── app.yaml

然后在您的hello.py 中,您必须将这两行放在文件的开头:

import sys
sys.path.insert(0, 'libs')

完成此操作后,您将能够使用要放入该libs 目录中的任何第 3 方库。

例如:

from bs4 import BeautifulSoup

【讨论】:

按照说明操作后,我仍然遇到此问题。 GAE 有什么变化吗? 杰西的回答要好得多,恕我直言。【参考方案3】:

您只需将包含要使用的库的文件夹复制到您的应用引擎项目中。

然后,当您部署它时,它会与您的应用程序一起上传并可供使用。

编辑:Jesse's answer 是我现在这样做的方式。那就这样做吧!

【讨论】:

【参考方案4】:

这里的工作方式是:

import sys
# sys.path.insert(0, 'libs') #"Old" way, not working for me.
sys.path.append(os.path.join(os.path.dirname(__file__), "libs")) # This works!

然后正常导入:

from bs4 import BeautifulSoup

【讨论】:

【参考方案5】:

只需将 Beautifulsoup 放在项目的根目录中并全部上传

【讨论】:

我可以把它放在一些特定的文件夹里吗?比如-'lib'? 可以操作 sys.path 或使用站点模块,如 `site.addsitedir('lib')【参考方案6】:

pip install -t lib package_name

lib第三方库的位置

那么你就可以像从 ipython 或终端使用的普通库一样使用这个包了。

【讨论】:

以上是关于如何在 Google App Engine 中包含第三方 Python 库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google App Engine 中解析 JSON?

Google App Engine 中的 Django 自定义模板标签

从 Google App Engine 数据存储区获取随机记录?

在 Angular 2 + Meteor 应用程序中包含 Google 字体

如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?

如何在 Google Gears Worker 中包含 javascript 文件(无 DOM 访问权限)