【问题标题】:Uploading Python third party libraries上传 Python 第三方库
【发布时间】:2012-05-18 07:12:59
【问题描述】:

Google App 引擎文档指出,如果第三方库是用纯 Python 编写的,则可以上传和使用它们。

我需要采取哪些步骤来执行此操作?

【问题讨论】:

  • 只需将它们包含在您的应用引擎项目目录(或子目录)中,并使用相对路径import 它们。当您部署到 appengine 时,子目录也将包含在推送中。
  • 感谢您的回复。所以说我想包含一个名为“tweetstream”的库,我只需将其文件夹复制到 app 文件夹(其中包含 app.yaml 文件),并在应用程序代码中说“import tweetsream”。这就是全部?并且我不需要在 app.yaml 文件中进行更改以使用第三方应用程序吗?

标签: python google-app-engine


【解决方案1】:

我所做的是在我的根目录中创建了一个名为 fix_path.py 的文件,如下所示:

import os
import sys
import jinja2   
# path to lib direcotory
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib'))

然后我创建了一个 lib 目录,并将模块放入其中。

例如,我使用 WTForms。我的文件结构是这样的。

    • wtforms
  • fix_path.py
  • somefile.py

当我准备好从我的 somefile 脚本调用它时

import fix_path # has to be first.
import wtforms

here 是我的 github 源代码中的这个示例。查看 fix_path.py 进行设置,查看 views.py 进行使用。

【讨论】:

  • 我不明白“fix_path.py”文件的用途是什么?此外,如果我在应用程序根文件夹中创建了“lib”目录(其中包含“app.yaml”,那么我是否需要提及 lib 目录的路径?
  • fix_path 文件只是路由到我存储所有库的 lib 目录。我没有在 app.waml 文件中提及 lib 文件夹。
  • 不应该只是在__init__.py吗?
【解决方案2】:

好吧,我尝试了以下步骤。

  1. 在我的项目根目录中创建了一个包含初始化文件的目录 (lib),即 lib/__init__.py
  2. 创建了我的模块 (mymodule.py),并定义了一个函数,即

    def myfunc():
        return "mycustomfunction"
    
  3. 在我的main.py 中导入 mymodule

    from lib import mymodule
    

我可以使用来自myfunc() 的返回值并将其作为模板值传递给我的 jinja2 模板

同样,如果我们遵循@rjz 在第一个答案中也指出的内容,如果第 3 方库只是一个模块,那么我们可以使用 init 文件将其保存在库中,它可以是使用导入语句导入(第 3 点)。如果第 3 方库是一个包,那么我们可以将它保存在项目根目录中,然后使用 main.py 中的这个导入语句再次导入它:

from thirdpartypackage import * 

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    相关资源
    最近更新 更多