python - 如何在不安装的情况下使用烧杯?

标签 python beaker

Beaker 不是 python 标准库的一部分,我想让我的应用程序不依赖于 python 标准库本身。为此,我下载了 beaker 并将其提取为我的应用程序的子包。

然后,我用这个:

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

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

from cache import CacheManager

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

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

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 的目录目录 到路径而不是烧杯目录本身:

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

在这种情况下,您需要添加 <root>目录到路径。

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

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

这可能意味着您从该文件夹运行您的程序, 这会将它添加到 PYTHONPATH自动地。 (因此它应该在您根本不修改 PYTHONPATH 的情况下运行)。

编辑:

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

关于python - 如何在不安装的情况下使用烧杯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655620/

相关文章:

python - Pyramid 烧杯访问已创建的 session

python - 如何在 Bottle 微框架中使用 beaker session?

android - Google App Engine 上跨 GET 和 POST 的 Beaker Session?

python - Pyramid_beaker : session. type = cookie 不安全?

python - 计算python数组中每5个元素的总和

终端中的 python - 如何获取当前颜色?

python - 递归函数与列表理解中的串联错误

python全局变量问题

python - 如何为 session 和登录系统设置 Pyramid_beaker?

python - 让 Pipenv 在同一文件夹中创建 virtualenv