2015-07-21 3 views
0

Я пытаюсь запустить пример python 3.4 на visual studio 2013. когда я пытаюсь выполнить import некоторый модуль из родительской папки и запускать его изнутри visual studio 2013, у меня всегда есть ошибка of ImportError: No module named 'foo'Python Ошибка модуля с Visual Studio 2013

Однако, когда я запускаю его с консоли с помощью команды python python boo.py, она выполняется хорошо.

В качестве примера, это моя структура проекта

myproject/ 
    foo.py 
    __init__.py 
    koo/ 
    boo.py 
    __init__.py 

foo.py содержание

def do1(): 
    print('Inside foo module') 

boo.py содержание

import sys 
sys.path.append("..") 
import foo 

foo.do1() 
+1

Когда вы запускаете его из VS, текущий каталог не является 'myproject/koo', поэтому добавление' ..' не делает то, что вы хотите. – martineau

+1

Попробуйте вместо этого использовать 'sys.path.append (os.path.dirname (__ file__) + '\\ ..')'. – martineau

+0

@martineau .. Это работало .. спасибо – fujy

ответ

1

Я думаю, этот вопрос не о Visual Studio а не о том, почему он не работает в VS. Реальный вопрос - почему он работает в терминале. Вероятно, это происходит потому, что терминал работает под управлением различных параметров окружающей среды, где интерпретатор питона может найти родительский каталог и, таким образом foo.py:

Когда модуль с именем спам импортирован, интерпретатор выполняет поиск для встроенного - в модуле с этим именем. Если он не найден, он ищет для файла с именем spam.py в списке каталогов, заданных переменной переменной sys.path . sys.path инициализируется из этих мест:

  • каталог, содержащий входной скрипт (или текущий каталог).

  • PYTHONPATH (список имен каталогов, с тем же синтаксисом, что и переменная оболочки PATH).

  • зависит от установки по умолчанию.

После инициализации программы Python могут изменять sys.path. Каталог , содержащий выполняемый скрипт, помещается в начало пути поиска, опережая путь стандартной библиотеки. Это означает , что скрипты в этом каталоге будут загружены вместо модулей с тем же именем в каталоге библиотеки. Это ошибка, если не требуется замена . См. Раздел «Стандартные модули» для получения дополнительной информации .

Итак, добавьте родительский каталог в pythonpath, и он будет работать. Или измените sys.path, добавив к нему родительский каталог.

+1

Спасибо за предложение .. Но мне в основном интересно узнать, почему он не работает в VS2013. Также я не хочу делать его зависимым от PYTHONPATH – fujy

+0

Тогда просто переместить foo.py в дочерний каталог – Geeocode

+0

Перемещение файла в дочерний каталог не является решением.поскольку это означает, что я не смогу организовать будущие проекты в среде VS. – fujy

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