ImportError with from.импортировать x в простые файлы Python - PullRequest
0 голосов
/ 23 февраля 2019

Я хотел перенести некоторый код с python 2 на python 3, и он не сработал при ошибке импорта.Поэтому я попытался избавиться от самого портирования и сосредоточиться на импорте, создав 2 основных файла python для тестирования.Однако я даже не могу заставить их работать.

Итак, у меня есть 2 файла

test.py:

print('Test works')

и test2.py:

from . import test

Результатом, однако, является эта ошибка в Pycharm:

ImportError: невозможно импортировать имя 'test' из '__main__' (C: /Users/Username/test2.py)

В оболочке Ubuntu:

Traceback (последний вызов был последним): файл "test2.py", строка 1, из from.import test1 SystemError: Родительский модуль '' не загружен, не может выполнить относительный импорт

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Структура папок имеет значение.Вы не назвали свой модуль;Я назову это foo.Поместите вещи в нужное место:

$ mkdir foo
$ touch foo/__init__.py
$ mv /some/place/{test1,test2}.py foo/

Обратите внимание, что python -c 'import test' уже работает, даже до того, как вы написали свой файл test.py.Чтобы избежать путаницы, я рекомендую назвать ваш файл test1.py.

Способ, которым вы называете свой код, имеет значение.Убедитесь, что . точка находится в sys.path:

$ export PYTHONPATH=.
$ python -m foo.test1

В качестве альтернативы это должно работать, если вы предпочитаете:

$ python foo/test1.py

РЕДАКТИРОВАТЬ:

Я ответил на вопрос# 1, и OP теперь задает вопрос № 2 об этой диагностике:

ImportError: невозможно импортировать имя 'test' из ' main ' (C: / Users / Username /test2.py)

Пожалуйста, организуйте свои файлы в правильной структуре.Вам нужно поместить test2.py в каталог foo/ (или как вы хотите его называть).Вам необходимо создать пустой файл foo/__init__.py, так как это важно для механизма import.

Кроме того, переменная PYTHONPATH env в вызывающей среде имеет значение.В дополнение к среде командной строки вы ввели среду PyCharm.Позаботьтесь о том, чтобы правильно настроить PyCharm для вашего проекта.Нажмите «Настройки» -> «Структура проекта» и убедитесь, что foo отображается как исходная папка.Вы можете отладить это в любой среде, выполнив следующие строки:

import sys
import pprint
pprint.pprint(sys.path)

Поскольку import test будет успешным даже без вашего проекта, я рекомендую переименовать в test1.py и использовать import test1, чтобы выможете быть уверены, что вы вводите ваш код.

0 голосов
/ 23 февраля 2019

В Python3

test2.py:

import test

test.py:

if __name__ == "__main__":
    print('Test works')

Если вы хотите напечатать «Тестовые работы» вдругой файл test2.py:

import test
test.main()

test.py:

def main():
    print('Test works')

if __name__ == "__main__":
    main()
...