2015-07-06 3 views
2

Я хочу назвать функцию в a.py от b.py. Я запускаю это в виртуальной среде.Вызов функции Python из другого скрипта?

a.py расположен в /home/user/admin/, и поэтому в b.py у меня есть

import sys 
sys.path.append('/home/user/admin') 
from a import my_function 

Но когда я запускаю его я получаю

from a import my_function 
ImportError: No module named my_function 

Почему не найти модуль?

ответ

1

Так как вы используете свой скрипт в virtualenv вам, возможно, потребуется изменить текущий рабочий каталог, как это:

import os 
filepath = os.path.realpath(__file__) 
dirname = os.path.dirname(filepath) 
os.chdir(dirname) 

from a import my_function 
# do stuff 

Кроме того, вы можете попробовать использовать пакет со следующим

  • Создайте __init__.py в /home/user/admin/ любой папке с файлом, подобным этому, ее распознают python как пакет. Этот файл может быть пустым.
  • Далее вы можете импортировать из б так:

    from .a import my_function 
    

Это относительный импорт, в основном то, что вы делаете, чтобы сказать переводчику импортировать a из текущего пакета, который ссылается по точке. Подробнее here

Как примечание стороны, не harcode файл текущий путь, вместо того, чтобы использовать что-то вроде этого:.

import os 
sys.path.append(os.path.dirname(__file__)) # in your case would be /home/user/admin 
+0

ли там нужно быть что-нибудь в '__init __ py'? и почему вы добавили «.». infront of? –

+0

нет, '__init __. Py' может быть пустым – Foon

+0

все еще не работает –

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