【问题标题】:How to use beaker without install it?如何在不安装的情况下使用烧杯?
【发布时间】:2013-03-27 18:29:21
【问题描述】:

Beaker 不是 python 标准库的一部分,我想让我的应用程序没有依赖项,而不是 python 标准库本身。为此,我下载了烧杯并将其解压缩为我的应用程序的子包。

然后,我用这个:

import os, inspect, sys
sys.path.append(os.path.abspath('./beaker'))
import beaker.middleware
app = beaker.middleware.SessionMiddleware(bottle.app(), session_opts)

得到这个错误

Traceback (most recent call last):
  File "start.py", line 8, in <module>
    from kokoropy import kokoro_init
  File "/home/gofrendi/workspace/kokoropy/kokoropy/__init__.py", line 9, in <module>
    import beaker.middleware
  File "/home/gofrendi/workspace/kokoropy/kokoropy/beaker/middleware.py", line 11, in <module>
    from beaker.cache import CacheManager
ImportError: No module named beaker.cache

问题出在 beaker.middleware 第 11 行:

from beaker.cache import CacheManager

解释器无法识别烧杯包,因为它没有安装 实际上,我可以通过将该行更改为以下内容来解决此问题:

from cache import CacheManager

但是这样做,我需要修改很多。

那么,有没有什么方法可以不用安装,不用做太多修改就可以使用烧杯呢?

PS:下面是我的目录结构

kokoropy
  |
  |--- __init__.py <-- this is where I write my script
  |
  |--- beaker
        |
        |--- __init__.py

编辑: 接受的答案是正确的,但就我而言,我在一级顶级目录中运行脚本。因此,以下解决方案似乎更稳健:

import os, inspect, sys
sys.path.append(os.path.dirname(__file__))

或者这个:How do I get the path of the current executed file in Python? :)

【问题讨论】:

  • 将 Beaker 复制到文件层次结构的下一级可能会解决问题。这样你就有了/home/gofrendi/workspace/kokoropy/beaker/middleware.py。基本上将烧杯视为应用程序的常规包。
  • 其实我的目录结构已经是这样了

标签: python beaker


【解决方案1】:

您必须添加包含beaker 目录的目录 到路径而不是烧杯目录本身:

<root>
  |
  --beaker
      |
      -- <...>

在这种情况下,您需要将&lt;root&gt; 目录添加到路径中。

根据您的示例代码,这将是:

sys.path.append(os.path.abspath('.'))

这可能意味着你从这个文件夹运行你的程序, 这会自动将其添加到PYTHONPATH。 (所以它应该在你完全不修改PYTHONPATH 的情况下运行)。

编辑:

有关该主题的更多信息,您可以查看有关模块的 Python 文档: Modules in python.

【讨论】:

  • 我已经尝试过您的建议,但错误仍然相同。我还是想知道怎么了
  • 啊,对不起,你是对的:p。我从 上方的一级目录运行脚本。通过使用 files 它可以按预期工作
  • @goFrendiAsgard 嗯,很好 - 我刚刚创建了一个测试目录结构(我现在没有可访问的烧杯)并且它有效,所以我真的很恼火它在你的情况下不起作用。很高兴它成功了。
猜你喜欢
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 2018-07-23
  • 2015-10-20
  • 2023-04-01
  • 1970-01-01
  • 2020-01-04
  • 2012-07-11
相关资源
最近更新 更多