导入项目根目录之上的模块

时间:2013-05-17 05:31:06

标签: python django

我正在使用以下结构:

http://timmyomahony.com/blog/2012/11/09/general-django-project-structure-or-folder-layout/

假设我在lib目录中有一些通用函数

foo.com     < -- site root
    lib/
    django_root/     < -- project root (checked into Github)

导入如:

from ... lib import my_lib

给我

ValueError: Attempted relative import beyond toplevel package

1 个答案:

答案 0 :(得分:1)

我可以看到两个干净的解决方案。

  1. 为此,您的lib必须Distutils兼容(拥有setup.py)文件。如果是,那么您只需使用带有e-标记的pip进行安装即可。只是做:

    pip install -e /full/path/to/foo.com/lib/
    

    这将以可编辑模式安装库,这意味着lib将不会安装到site-packages,但会在那里创建一个egg符号链接。这意味着您将对lib中的文件所做的任何更改将自动在您的环境中生效。

  2. 我认为这不像第一个建议那么干净。只需将lib添加到Django的manage.py

    中的PATH中
    import os, sys
    root_path = os.path.abspath(os.path.join(__file__, '..', '..'))
    lib_path = os.path.join(root_path, 'lib')
    sys.path.insert(0, lib_path)
    # ...