3

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__))

或者可能是这样:如何在 Python 中获取当前执行文件的路径?:)

4

1 回答 1

3

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

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

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

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

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

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

编辑:

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

于 2013-03-27T09:55:04.177 回答