Існує багато способів імпорту файлу python, все з їх плюсами та мінусами.
Не просто поспіхом вибирайте першу стратегію імпорту, яка працює для вас, інакше доведеться переписувати кодову базу пізніше, коли виявите, що вона не відповідає вашим потребам.
Почну з пояснення найпростішого прикладу №1, потім перейду до найбільш професійного та надійного прикладу №7
Приклад 1: Імпорт модуля python з інтерпретатором python:
Помістіть це в /home/el/foo/fox.py:
def what_does_the_fox_say():
print("vixens cry")
Потрапте в інтерпретатора пітона:
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, викликали функцію python what_does_the_fox_say()
зсередини 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, Використовуйте з ... імпорту ... функціональності:
Помістіть це в /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, імпортуйте свій файл через piggybacking запуску python:
Оновлення: Цей приклад працював як для 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, запуск замовчувань там відключений за замовчуванням.
Заслуга за цей джист посилається на адресу: 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