2016-06-05 3 views
-1

Недавно я отклонил Python 2.7.6 и установил новейший Python. Я заметил, что импорт в мои проекты не работает (они, очевидно, делали это ранее).Импорт модулей в новейшие Python

Предположим, у меня есть папка "MODULES", которая является PYTHONPATH. Я создаю в нем некоторые вещи, например:

"folder1"; «this.py»

И теперь через «this.py» я могу легко импортировать что-либо внутри «folder1» и сделать импорт одноуровневые в «folder1», но если бы я сделать еще папки внутри него (например, «вложенная») и место там любой файл Python (например «keepgoing.py») не доступен любой файл Python из вне «вложенной»

(ImportError: нет модуля подпапка ")

PS: На самом деле я могу импортировать "keepgoing.py" от pythonshell

Что вызывает это? Как я могу сделать доступными мои папки/пакеты? Я пробовал использовать пустые inits, без inits, inits from from ... import и просто импортировать. Или, может быть, мне нужно продлить мой PYTHONPATH?

Или, может быть, как сейчас сделать эту штуку работать на Python 3.5 https://github.com/Accel92/RPG-Game

из game.map1 импорта Карта

ImportError: Нет модуль с именем «игра»

+0

Вы создали файл'__init__' и выполнили соглашения, чтобы создать пакет? См. Например: http://pythoncentral.io/how-to-create-a-python-package/ – armatita

+0

@armatita Да, я, как я уже сказал, уже имел проекты, работающие над Python 2.7.6, например https : //github.com/Accel92/RPG-Game. Поскольку я установил новейший Python, он не видит пакетов – DamianM

+0

Хорошо, я вижу, что происходит. Я считаю, что вы должны использовать относительный импорт. Позвольте мне сформулировать ответ. – armatita

ответ

0

Ваша игра не работает несколько причин. Первыми (и целью вашего вопроса) являются относительный импорт. Редактирование __init__ файлов, как это:

игра/__ init__.py

from . import chars1 
from . import map1 
from . import core 

ядро ​​/ __ init__.py

from .engine import Engine 
from .fight import Fight 
from .player import Player 
from .new_player import my_player 
from .error_log import wrong_choice 
from .int_input import int_input 
from .choose_skill import choose_skill 

chars1/__ init__.py

from .knight import Knight 
from .mage import Mage 
from .spider1 import SpiderLv1 

и т.д.

Также вы должны изменить print функции print() как это:

print ("%s's hp is %s" %(mob_name, mob_hp)) 

И, наконец, ваши raw_input функции должны теперь быть только input.

In this link вы сможете понять обоснование этого выбора.

Это те проблемы, которые я обнаружил в вашем коде, но я не думаю, что там есть что-то серьезное.

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