Есть много способов импортировать файл Python, все со своими плюсами и минусами.
Не торопитесь выбирать первую стратегию импорта, которая работает для вас, иначе вам придется переписать кодовую базу позже, когда вы обнаружите, что она не соответствует вашим потребностям.
Я начну с объяснения самого простого примера № 1, а затем перейду к самому профессиональному и надежному примеру № 7
Пример 1. Импорт модуля python с интерпретатором python:
Поместите это в /home/el/foo/fox.py:
def what_does_the_fox_say():
print("vixens cry")
Получить в интерпретатор Python:
el@apollo:/home/el/foo$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
>>> import fox
>>> fox.what_does_the_fox_say()
vixens cry
>>>
Вы импортировали fox через интерпретатор python, what_does_the_fox_say()
вызвали функцию python из fox.py.
Пример 2, используйте execfile
или ( exec
в Python 3 ) в скрипте для выполнения другого файла Python на месте:
Поместите это в /home/el/foo2/mylib.py:
def moobar():
print("hi")
Поместите это в /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py")
moobar()
запустите файл:
el@apollo:/home/el/foo$ python main.py
hi
Функция moobar была импортирована из mylib.py и сделана доступной в main.py
Пример 3, использование из ... import ... функциональность:
Поместите это в /home/el/foo3/chekov.py:
def question():
print "where are the nuclear wessels?"
Поместите это в /home/el/foo3/main.py:
from chekov import question
question()
Запустите это так:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
Если вы определили другие функции в chekov.py, они не будут доступны, если вы import *
Пример 4. Импорт riaa.py, если он находится в другом месте файла, из которого он импортирован.
Поместите это в /home/el/foo4/stuff/riaa.py:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
Поместите это в /home/el/foo4/main.py:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
Запустить его:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
Это импортирует все в чужом файле из другого каталога.
Пример 5, использование os.system("python yourfile.py")
import os
os.system("python yourfile.py")
Пример 6, импортируйте ваш файл с помощью контекста python startuphook:
Обновление: этот пример раньше работал как для python2, так и для 3, но теперь работает только для python2. Python3 избавился от этого пользовательского набора функций автозапуска, потому что он использовался авторами библиотек Python с низким уровнем квалификации, использовавшими его для невежливого внедрения кода в глобальное пространство имен перед всеми пользовательскими программами. Если вы хотите, чтобы это работало для python3, вам нужно стать более креативным. Если я скажу вам, как это сделать, разработчики Python также отключат этот набор функций, так что вы сами по себе.
См .: https://docs.python.org/2/library/user.html.
Поместите этот код в свой домашний каталог в ~/.pythonrc.py
class secretclass:
def secretmessage(cls, myarg):
return myarg + " is if.. up in the sky, the sky"
secretmessage = classmethod( secretmessage )
def skycake(cls):
return "cookie and sky pie people can't go up and "
skycake = classmethod( skycake )
Поместите этот код в ваш main.py (может быть где угодно):
import user
msg = "The only way skycake tates good"
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")
Запустите его, вы должны получить это:
$ python main.py
The only way skycake tates good is if.. up in the sky,
the skycookie and sky pie people can't go up and have the sky pie!
SKYCAKE!
Если вы получаете здесь ошибку: ModuleNotFoundError: No module named 'user'
это означает, что вы используете python3, автозагрузка там отключена по умолчанию.
Кредит на этот jist идет по адресу : https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Отправить вместе с вашими пользователями.
Пример 7. Наиболее надежный: импорт файлов в python с помощью простой команды import:
- Создать новый каталог
/home/el/foo5/
- Создать новый каталог
/home/el/foo5/herp
Создайте пустой файл с именем __init__.py
herp:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
Создайте новый каталог / home / el / foo5 / herp / derp
Под сумасшедшим, сделайте другой __init__.py
файл:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
В / home / el / foo5 / herp / derp создайте новый файл с именем yolo.py
Поместите это туда:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
Момент истины, Создайте новый файл /home/el/foo5/main.py
, поместите это туда;
from herp.derp.yolo import skycake
skycake()
Запустить его:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
Пустой __init__.py
файл сообщает интерпретатору python, что разработчик намеревается, что этот каталог будет импортируемым пакетом.
Если вы хотите увидеть мой пост о том, как включить ВСЕ файлы .py в каталог, см. Здесь: https://stackoverflow.com/a/20753073/445131.