Каковы обязательные шаги для импорта модуля? - PullRequest
0 голосов
/ 09 сентября 2010

Я новичок в python и сталкиваюсь с проблемой:

Я пытаюсь расширить свой файл SConstruct и импортировать модуль, расположенный в подкаталоге моего проекта.

Вот мой SConstruct файл:

import os, sys
sys.path.append(os.path.abspath(os.path.join('.', 'custom_dir')))
import mymodule

mymodule.foo()

Вот файл mymodule.py, расположенный в подкаталоге с именем custom_dir:

def foo():
  print 'foo'

У меня также есть __init__.py файл в моем каталоге custom_dir.

Когда я выполняю scons:

  File ".\SConstruct", line 22, in <module>
    mymodule.foo()
AttributeError: 'module' object has no attribute 'foo'

Если я выполняю python.exe SConstruct, я получаю тот же результат.

Чтоя здесь не так делаю?

Ответы [ 3 ]

1 голос
/ 09 сентября 2010

Остерегайтесь путей манипуляции;неприятности найдут вас.

Взгляните на http://docs.python.org/tutorial/modules.html

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

Структура файла:

/SConstruct.py
/custom_dir/
/custom_dir/__init__.py
/custom_dir/mymodule.py

/ custom_dir / __ init__.py пусто

/ custom_dir / mymodule.py:

def foo():
    print 'foo'

/ SConstruct.py:

import custom_dir.mymodule as mymodule

mymodule.foo()
1 голос
/ 09 сентября 2010

Вы должны убедиться, что вы импортируете правильный модуль, а не другой с таким же именем где-нибудь в вашем пути

попробуйте запустить вашу программу с python.exe -v SConstruct

или

print mymodule.__file__ прямо перед print mymodule.foo()

0 голосов
/ 14 февраля 2013

Вы можете получить доступ к классам SCons, например, Среда из модулей, отличных от SConstruct, включая

from SCons.Script import *

См. Документацию здесь .

Кроме того, вместо использования «.» чтобы указать корень дерева сборки, вы должны использовать Dir('#').path.

...