如何使用烧杯而不安装它?

时间:2013-03-27 09:37:15

标签: 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

由于没有安装,解释器无法识别烧杯包 实际上我可以通过改变这一行来解决这个问题:

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?:)

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

编辑:

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

相关问题