изменение в импорте в python3 - PullRequest
0 голосов
/ 08 июня 2018

Я использую python 3.4.4 и тестирую функцию «init.py», создавая образец пакета, но не могу реализовать.Упомянутый случай отлично работает в случае версии Python 2.7.13.Может кто-нибудь сказать мне ошибку, которую я делаю, или есть какие-либо изменения в синтаксисе версий Python 3.x.Пожалуйста, помогите мне изучить Python 3?

Dir Структура:

TestPackage/
    __init__.py
    TestModule.py
run.py

Содержимое TestModule.py:

def TestFun():
    print("Welcome")

Содержимое __init__.py:

from TestModule import TestFun

Содержимое run.py:

from TestPackage import TestFun
TestFun()

Когда явыполнить файл run.py, я получил следующую ошибку:

Traceback (most recent call last):
  File "D:\CASE03\run01.py", line 1, in <module>
    from TestPackage import TestFun
  File "D:\CASE03\TestPackage\__init__.py", line 1, in <module>
    from TestModule import TestFun
ImportError: No module named 'TestModule'

Но когда я использую Python 2.7.13, он работает отлично.Пожалуйста, ведите меня.

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Внутри __init__.py, если вы измените

from TestModule import TestFun

на

from .TestModule import TestFun

Вы получите ожидаемое поведение.

См .: PEP 328 (разделы, касающиеся относительного импорта с использованием начальных точек).

0 голосов
/ 08 июня 2018

Попробуйте изменить __init__.py на следующий код:

from TestPak.TestModule import TestFun
0 голосов
/ 08 июня 2018

Самое простое решение - установить __init__.py как пустой файл.Если вы заинтересованы в контроле того, что импортируется из вашего модуля, когда вы делаете from Testmodule import *, вы можете включить __all__ = ['TestFun'] в __init__.py файл.

...