在1个包python

时间:2015-07-13 16:21:44

标签: python import sys.path

我有2个文件在一个包中,将每个1-2个func从另一个中拉出来会很方便。在 init .py中,我尝试了:

from mappings import *
from get_models import *

在mappings.py中:

#!/usr/bin/env python

import os, sys, re

sys.path.append('/home/cchilders/scripts/python/work-tasks/unit_tests_scripts/completed')

from . import get_model_name_or_None

在get_models.py中:

#!/usr/bin/env python

import os, re, sys

sys.path.append('/home/cchilders/scripts/python/work-tasks/unit_tests_scripts/completed')

from . import process_model

而不是命名空间冲突或诸如此类的,我实际得到:

[cchilders@localhost completed]$ ./mappings.py 
Traceback (most recent call last):
  File "./mappings.py", line 7, in <module>
    from . import get_model_name_or_None
ValueError: Attempted relative import in non-package

这让我感到惊讶,我甚至对我的软件包很偏执,将它附加到sys.path。当我尝试从1个文件导入到另一个文件时,不通过 init .py并将init留空,我的导入工作正常。我想知道:

  1. python如何在文件结构中找到包(这不是django app,只是常规文件夹)?那么我不需要附加到sys.path吗?

  2. 为什么我不能将名称放入包名称空间并将其导入每个单独的模块中?我甚至尝试过改变

  3. from mappings import * from get_models import *

    更安全from get_models import get_model_name_or_None,我得到与上面完全相同的错误

    谢谢

    我的 init .py为空,以及mappings.py:

    #!/usr/bin/env python
    
    import os, sys, re
    

    (init为空,没有附加我的路径,没有在映射中尝试任何导入,get_model正在从映射中正确导入函数)我得到:

    [cchilders@localhost completed]$ python -m mappings.py
    *correct output*
    /usr/bin/python: No module named mappings.py
    

    正确输出是以前运行的代码(正如预期的那样),但是我收到警告no module。奇怪的是,当我取消注释我的追加时:

    sys.path.append('/home/cchilders/scripts/python/work-tasks/unit_tests_scripts/completed')
    

    我仍然得到完全相同的正确输出,然后警告/usr/bin/python: No module named mappings.py

    尝试在get_models中使用映射也很困难:

    1. import mappings与空init一起使用会导致NameError: name 'mappings' is not defined

    2. 在我的初始化中使用import mappingsimport mapping会导致NameError: name 'mappings' is not defined

    3. 在我的初始化版中使用import mappings,但未在get_models.py中使用mappings.process_model并尝试在get_models中调用NameError: global name 'mappings' is not defined,收益率为:contains

      < / LI>

0 个答案:

没有答案
相关问题