2017-02-23 16 views
1

My Python version 3.5.Python и импорт из другого пакета

У меня есть проект со структурой, как это:

-- test 
---- __init__.py 
---- one 
------ __init__.py 
------ first.py 
---- two 
------ __init__.py 
------ second.py 

Содержание first.py файла:

class FirstClass(object): 

    def hello(self): 
     return 'hello' 

Содержание second.py файла:

def main(): 
    first = FirstClass() 
    print(first.hello()) 

if __name__ == '__main__': 
    main() 

Проблема заключается в том, что я могу 't импорт FirstClass в second.py, я попробовал:

from test.one.first import FirstClass 

Result: 

Traceback (most recent call last): 
    File "second.py", line 3, in <module> 
    from test.one.first import FirstClass 
ModuleNotFoundError: No module named 'test.one' 

Кроме того, я попробовал этот подход:

from ..one.first import FirstClass 

Result: 

Traceback (most recent call last): 
    File "second.py", line 3, in <module> 
    from ..one.first import FirstClass 
ValueError: attempted relative import beyond top-level package 

Итак, мой вопрос: как сделать, чтобы импортировать в подобных ситуациях?

+0

см: http://stackoverflow.com/questions/8706309/how-to-reference-to -the-top-level-module-in-python-inside-a-package – putonspectacles

+0

Другой связанный с этим вопрос: http://stackoverflow.com/questions/16981921/relative-imports-in-python-3 – Leon

ответ

0

это хак, но, но будет работать:

def main(): 
    first = FirstClass() 
    print(first.hello()) 

if __name__ == '__main__': 
    from sys import path 
    from os.path import dirname as dir 

    path.append(dir(path[0])) 
    __package__ = "one" 
    from one.first import FirstClass 
    main() 

см: ссылка Леона в комментарии

Смежные вопросы