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/