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?:)
答案 0 :(得分:3)
您必须添加包含beaker
目录的目录
到路径而不是烧杯目录本身:
<root>
|
--beaker
|
-- <...>
在这种情况下,您需要将<root>
目录添加到路径中。
根据您的示例代码,这将是:
sys.path.append(os.path.abspath('.'))
这可能意味着您从此文件夹运行程序,
这将自动将其添加到PYTHONPATH
。
(所以它应该在没有你完全修改PYTHONPATH
的情况下运行。)
编辑:
有关该主题的更多信息,您可以查看有关模块的Python文档: Modules in python