Как импортировать другие файлы Python?

Как импортировать другие файлы в Python?

  1. Как именно я могу импортировать определенный файл Python, например import file.py?
  2. Как я могу импортировать папку вместо определенного файла?
  3. Я хочу динамически загружать файл Python во время выполнения на основе ввода данных пользователем.
  4. Я хочу знать, как загрузить только одну конкретную часть из файла.

Например, в main.py у меня есть:

from extra import * 

Хотя это дает мне все определения в extra.py, хотя, возможно, все, что мне нужно, - это одно определение:

def gap():
    print
    print

Что мне добавить к оператору import, чтобы просто получить gap от extra.py?


person Tamer    schedule 28.02.2010    source источник
comment
См. Также: stackoverflow.com/questions/8663076/   -  person dreftymac    schedule 19.05.2016
comment
Если A и B - это два файла в одном каталоге в python 3.x, и вы хотите импортировать содержимое A, import A не будет работать. Мы должны использовать from current_directory_name import * или from current_directory_name import THINGS_YOU_WANT_TO_IMPORT. Поиграйте немного для импорта из другого каталога   -  person Shivam Jha    schedule 01.07.2020


Ответы (22)


importlib был добавлен в Python 3 для программного импорта модуля.

import importlib

moduleName = input('Enter module name:')
importlib.import_module(moduleName)

Расширение .py следует удалить из moduleName. Функция также определяет package аргумент для относительного импорта.

В python 2.x:

  • Просто import file без расширения .py
  • Папку можно пометить как пакет, добавив пустой __init__.py файл
  • Вы можете использовать функцию __import__, которая принимает имя модуля (без расширения) как расширение строки
pmName = input('Enter module name:')
pm = __import__(pmName)
print(dir(pm))

Для получения более подробной информации введите help(__import__).

person tabdulradi    schedule 28.02.2010
comment
Если вы добавите import filename в init .py, вы можете импортировать модуль напрямую как имя папки. - person CornSmith; 22.07.2013
comment
с help(__import__): Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module. - person Tadhg McDonald-Jensen; 23.02.2016
comment
Что, если это не пакет, а просто файл сценария? - person Jonathan; 29.07.2018
comment
Для импорта файла сценария по тому же пути (возможно, он также будет работать для файла сценария в пути поиска Python) import filenamenoext отлично работает для меня с Python 3.4.8. - person Alex Hall; 05.08.2018
comment
Это все еще актуально в 2019 году? Это python3 или 2? - person Sandburg; 24.01.2019
comment
Импорт в Python - это странный беспорядок. Должна быть возможность импортировать любую функцию из любого файла с простой строкой кода, указывающей путь (абсолютный или относительный, жестко запрограммированный или сохраненный в переменной) к файлу. Python, просто сделай это! - person Georg; 15.08.2019
comment
это было то. Я делал import file.py. Спасибо! - person Orsu; 04.02.2020

Есть много способов импортировать файл Python, все со своими плюсами и минусами.

Не спешите выбирать первую стратегию импорта, которая работает для вас, иначе вам придется переписать кодовую базу позже, когда вы обнаружите, что она не соответствует вашим потребностям.

Я начну с объяснения самого простого примера №1, а затем перейду к самому профессиональному и надежному примеру №7.

Пример 1. Импорт модуля Python с интерпретатором Python:

  1. Поместите это в /home/el/foo/fox.py:

    def what_does_the_fox_say():
      print("vixens cry")
    
  2. Войдите в интерпретатор 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, вызвали функцию python what_does_the_fox_say() из fox.py.

Пример 2. Используйте execfile или (exec в Python 3) в скрипте для выполнения другого файла Python на месте :

  1. Поместите это в /home/el/foo2/mylib.py:

    def moobar():
      print("hi")
    
  2. Поместите это в /home/el/foo2/main.py:

    execfile("/home/el/foo2/mylib.py")
    moobar()
    
  3. запустите файл:

    el@apollo:/home/el/foo$ python main.py
    hi
    

    Функция moobar была импортирована из mylib.py и сделана доступной в main.py

Пример 3. Использование функции from ... import ...

  1. Поместите это в /home/el/foo3/chekov.py:

    def question():
      print "where are the nuclear wessels?"
    
  2. Поместите это в /home/el/foo3/main.py:

    from chekov import question
    question()
    
  3. Запускаем так:

    el@apollo:/home/el/foo3$ python main.py 
    where are the nuclear wessels?
    

    Если вы определили другие функции в chekov.py, они были бы недоступны, если вы import *

Пример 4. Импортируйте riaa.py, если он находится не в том месте, где он был импортирован

  1. Поместите это в /home/el/foo4/stuff/riaa.py:

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
    
  2. Поместите это в /home/el/foo4/main.py:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
    
  3. Запустить его:

    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:

Обновление: этот пример работал как для 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 с помощью простой команды импорта:

  1. Создайте новый каталог /home/el/foo5/
  2. Создайте новый каталог /home/el/foo5/herp
  3. Создайте пустой файл с именем __init__.py под herp:

    el@apollo:/home/el/foo5/herp$ touch __init__.py
    el@apollo:/home/el/foo5/herp$ ls
    __init__.py
    
  4. Создайте новый каталог / home / el / foo5 / herp / derp

  5. Под derp создайте еще один __init__.py файл:

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
    
  6. В / 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!!"
    
  7. Момент истины, создайте новый файл /home/el/foo5/main.py, поместите его туда;

    from herp.derp.yolo import skycake
    skycake()
    
  8. Запустить его:

    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

person Eric Leschinski    schedule 23.12.2013
comment
Вам также следует добавить Пример 6: использование __import__(py_file_name). В любом случае удивительный гид - person oriadam; 22.12.2015
comment
Каждый раз, когда у меня возникает проблема с импортом, я задаю этот вопрос и всегда могу решить свою проблему. Если бы я мог проголосовать за каждый раз, когда вы мне помогли, я бы это сделал. - person dgBP; 23.02.2016
comment
В чем большая разница между всем этим и почему одно лучше любого другого? Например, 5, вы пишете файлы импорта на Python с помощью простой команды импорта, но вы также используете (голую?) Команду импорта в примерах 1, 3 и 4, не так ли? - person HelloGoodbye; 10.08.2016
comment
Привет, Эрик! Я думаю, вы меня неправильно поняли ... Я просто хотел ответить на вопрос HelloGoodbyes, в чем большая разница между всем этим, потому что мне тоже было любопытно, и я нашел запись в блоге (которая, кстати, НЕ моя), которая, как я думал, была полезна и для него ... . - person dpat; 11.09.2016
comment
Хороший ответ, но тот факт, что вы постоянно используете другой файл импорта в качестве примера, затрудняет его чтение. - person gented; 22.03.2017
comment
@ErikLeschinski, как бы вы классифицировали и использовали метод вызова подпроцесса? как вы думаете, его следует добавить вместе с методом 6? - person garej; 02.04.2017
comment
Как насчет файла, который просто импортирует и загружает все необходимые пакеты. Как можно сделать это и сообщить текущему файлу обо всем, что загружено в другой файл? Спасибо. - person Royi; 11.11.2017
comment
Подчеркну, что даже если вы работаете в Windows, при импорте учитывается регистр. Таким образом, у вас не может быть Module.py и иметь в своем коде модуль импорта - person radato; 05.03.2018
comment
Пример 4 создает файл с окончанием .pyc. Кто знает, как предотвратить его создание? Или надо? - person tera_789; 30.01.2019
comment
ваше вступительное заявление должно быть предшественником каждого популярного ответа, спасибо за это, моя аналитическая база кода - беспорядок, рефакторинг впервые. - person Umar.H; 07.06.2019
comment
Также хочу добавить - похоже, у пакетов не может быть тире в имени: \ - person blizz; 23.04.2020
comment
как importlib победил этот ответ, я никогда не узнаю - person Chaim Eliyah; 18.02.2021

Чтобы импортировать определенный файл Python во время выполнения с известным именем:

import os
import sys

...

scriptpath = "../Test/"

# Add the directory containing your module to the Python path (wants absolute paths)
sys.path.append(os.path.abspath(scriptpath))

# Do the import
import MyModule
person James    schedule 30.04.2013
comment
Мой друг проверил это сегодня безуспешно - похоже, имя файла там не должно быть. Он использовал локальный файл в родительском каталоге и ./ работал в конце, как если бы родительский каталог (..). Исправление проблемы в сообщении было отклонено - возможно, недоразумение (?) Распечатайте sys.path и сравните записи, если вы не уверены ... - person Tom; 26.11.2019
comment
для меня это был лучший ответ, краткий и легко воспроизводимый - person El_1988; 01.11.2020

Первый случай

Вы хотите импортировать файл A.py в файл B.py, эти два файла находятся в одной папке, например:

. 
├── A.py 
└── B.py

Сделать это можно в файле B.py:

import A

or

from A import *

or

from A import THINGS_YOU_WANT_TO_IMPORT_IN_A

После этого вы сможете использовать все функции файла A.py в файле B.py.


Второй случай

Вы хотите импортировать файл folder/A.py в файл B.py, эти два файла находятся в разных папках, например:

.
├── B.py
└── folder
     └── A.py

Сделать это можно в файле B.py:

import folder.A

or

from folder.A import *

or

from folder.A import THINGS_YOU_WANT_TO_IMPORT_IN_A

После этого вы сможете использовать все функции файла A.py в файле B.py.


Резюме

  • В первом случае файл A.py - это модуль, который вы импортируете в файл B.py, вы использовали синтаксис import module_name.
  • Во втором случае folder - это пакет, содержащий модуль A.py, вы использовали синтаксис import package_name.module_name.

Для получения дополнительной информации о пакетах и ​​модулях обратитесь к этому ссылка.

person Bohao LI    schedule 15.05.2019
comment
Я попробовал с небольшими вариациями, и это сработало. from folder_a.script import * Script.py находится в папке a. - person Justin; 29.05.2019
comment
+1 Это то, что я искал. Не могу понять других ответов, но вы объяснили это с помощью каталогов. - person Black Thunder; 07.10.2019
comment
Что, если я хочу импортировать файл py, находящийся в родительском каталоге? - person bytedev; 16.10.2019
comment
@bytedev Добавьте import sys и sys.path.append("..") в начало файла. Согласно этому: stackoverflow.com/a/48341902/6057480. Протестировано, отлично работает, после этого вы сможете импортировать файл py в родительский каталог и по-прежнему сможете импортировать файлы py в тот же каталог и подкаталоги. - person Bohao LI; 16.10.2019
comment
даже в том же каталоге в python 3.x import A не будет работать. Мы должны использовать from current_directory_name import * или from current_directory_name import THINGS_YOU_WANT_TO_IMPORT - person Shivam Jha; 01.07.2020
comment
@ShivamJha У меня Python версии 3.7.4, и import A хорошо работает, если A.py и B.py находятся в одной папке. - person Bohao LI; 02.07.2020
comment
Тогда это круто для тебя, братан, я использую 3.8.x, но у меня это не сработало. - person Shivam Jha; 02.07.2020
comment
@ShivamJha Я протестировал python 3.8.3, и он по-прежнему работает (проверено на ubuntu и mac), что может подтвердить, что эта проблема не является проблемой версии. Прочтите сообщение об ошибке, может помочь. Хотя я не знаю, почему у тебя это не работает. - person Bohao LI; 02.07.2020
comment
Хорошо, спасибо @BohaoLI, я проверю, брат - person Shivam Jha; 02.07.2020
comment
@Falaque Я тестировал 3.8.5 на Windows, и он работает. Только что установил эту версию из приложения Microsoft Store на Windows. - person Bohao LI; 25.08.2020
comment
Я в windows 8.1; Я использую python-3.8.5-embed-amd64. Но это не работает. - person Falaque; 27.08.2020
comment
@Falaque Я в Windows 10. - person Bohao LI; 27.08.2020

У вас не так много сложных методов для импорта файла Python из одной папки в другую. Просто создайте файл __init__.py, чтобы объявить, что эта папка является пакетом python, а затем перейдите в файл хоста, в который вы хотите импортировать, просто введите

from root.parent.folder.file import variable, class, whatever

person Fatih Karatana    schedule 24.01.2013
comment
Что, если мне нужен относительный путь? - person domih; 02.06.2017

Импортировать документ .. - Ссылка для справки

Файлы __init__.py необходимы для того, чтобы Python обрабатывал каталоги как содержащие пакеты, это сделано для предотвращения непреднамеренного скрытия допустимых модулей, которые появляются позже на пути поиска модулей, в каталогах с общим именем, например строкой.

__init__.py может быть просто пустым файлом, но он также может выполнять код инициализации для пакета или устанавливать переменную __all__.

mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module
person Sanyal    schedule 02.10.2015

from file import function_name  ######## Importing specific function
function_name()                 ######## Calling function

а также

import file              ######## Importing whole package
file.function1_name()    ######## Calling function
file.function2_name()    ######## Calling function

Вот два простых способа, которые я понял к настоящему времени, и убедитесь, что ваш файл «file.py», который вы хотите импортировать как библиотеку, присутствует только в вашем текущем каталоге.

person Devendra Bhat    schedule 09.02.2018

Если определенная функция находится в файле x.py:

def greet():
    print('Hello! How are you?')

В файле, в который вы импортируете функцию, напишите следующее:

from x import greet

Это полезно, если вы не хотите импортировать все функции в файл.

person Sid    schedule 17.08.2019

лучший способ импортировать файлы .py - использовать __init__.py. Проще всего создать пустой файл с именем __init__.py в том же каталоге, что и ваш файл .py.

это сообщение Майка Груши - отличное объяснение __init__.py и его использовать для создания, импорта и настройки пакетов Python.

person supreme    schedule 27.06.2017
comment
@GhostCat Я обновил свой ответ. спасибо за ссылку было бы предпочтительнее. - person supreme; 27.06.2017
comment
И поймите, что не все живут в вашем часовом поясе. - person GhostCat; 28.06.2017
comment
Вы должны были опубликовать содержание сообщения Майка Груши, тем более что ссылка теперь 404s. https://web.archive.org/web/20190309045451/https://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html - person qwr; 16.06.2019

Я хотел бы добавить это примечание, которое я не очень ясно где-то еще; внутри модуля / пакета при загрузке из файлов имя модуля / пакета должно начинаться с префикса mymodule. Представьте себе mymodule такой макет:

/main.py
/mymodule
    /__init__.py
    /somefile.py
    /otherstuff.py

При загрузке _4 _ / _ 5_ из __init__.py содержимое должно выглядеть так:

from mymodule.somefile import somefunc
from mymodule.otherstuff import otherfunc
person Svend    schedule 18.04.2018

Как я импортирую, это импортирую файл и использую сокращенное его имя.

import DoStuff.py as DS
DS.main()

Не забывайте, что ваш импортируемый файл ДОЛЖЕН иметь расширение .py.

person Luke359    schedule 09.05.2016
comment
Разве import DoStuff.py as DS не будет пытаться импортировать py из DoStuff? - person Benj; 16.04.2019

Есть несколько способов включить ваш скрипт python с именем abc.py

  1. например если ваш файл называется abc.py (import abc) Ограничение состоит в том, что ваш файл должен находиться в том же месте, где находится вызывающий скрипт python.

импорт abc

  1. например если ваш файл python находится внутри папки Windows. Папка Windows находится в том же месте, где находится вызывающий скрипт python.

из папки import abc

  1. В случае, если скрипт abc.py доступен внутри внутренней_папки, которая находится внутри папки

из папки. внутренняя_папка импортировать abc

  1. Как ответил Джеймс выше, если ваш файл находится в каком-то фиксированном месте

import os
import sys
scriptpath = "../Test/MyModule.py"
sys.path.append (os.path.abspath (scriptpath))
import MyModule

Если ваш скрипт python обновляется, и вы не хотите загружать, используйте эти операторы для автоматического обновления. Бонус :)

%load_ext autoreload 
%autoreload 2
person rishi jain    schedule 29.07.2019

Вы также можете сделать это: from filename import something

пример: from client import Client Обратите внимание, что вам не нужно расширение .py .pyw .pyui.

person Lucas Soares    schedule 30.06.2018

Если модуль, который вы хотите импортировать, находится не в подкаталоге, попробуйте следующее и запустите app.py из самого глубокого общего родительского каталога:

Структура каталога:

/path/to/common_dir/module/file.py
/path/to/common_dir/application/app.py
/path/to/common_dir/application/subpath/config.json

В app.py добавьте путь клиента к sys.path:

import os, sys, inspect

sys.path.append(os.getcwd())
from module.file import MyClass
instance = MyClass()

Необязательно (если вы загружаете, например, конфигурации) (Inspect кажется наиболее надежным для моих случаев использования)

# Get dirname from inspect module
filename = inspect.getframeinfo(inspect.currentframe()).filename
dirname = os.path.dirname(os.path.abspath(filename))
MY_CONFIG = os.path.join(dirname, "subpath/config.json")

Запустить

user@host:/path/to/common_dir$ python3 application/app.py

Это решение работает для меня в cli, а также в PyCharm.

person Christoph Schranz    schedule 04.12.2018

Вот как я вызвал функцию из файла python, который позволяет мне вызывать любые функции.

import os, importlib, sys

def callfunc(myfile, myfunc, *args):
    pathname, filename = os.path.split(myfile)
    sys.path.append(os.path.abspath(pathname))
    modname = os.path.splitext(filename)[0]
    mymod = importlib.import_module(modname)
    result = getattr(mymod, myfunc)(*args)
    return result

result = callfunc("pathto/myfile.py", "myfunc", arg1, arg2)
person Xiao-Feng Li    schedule 28.04.2019
comment
Чем сделать новую функцию лучше, чем использовать ее напрямую? - person qwr; 16.06.2019
comment
@qwr Новая функция callfunc () - это просто оболочка кода для динамического вызова целевой функции в файле Python. Приведенный пример - это целевой myfunc в пути к файлу python pathto / myfile.py. Что вы имеете в виду под прямым использованием функции? - person Xiao-Feng Li; 18.06.2019
comment
У меня отлично сработало. В моем примере я заменил: from mypath import Path на Path = callfunc("/folder/to/mypath.py", "Path"). Спасибо @ Xiao-FengLi - person user319436; 24.11.2019

Просто чтобы импортировать файл python в другой файл python

скажем, у меня есть файл python helper.py, который имеет функцию отображения, например

def display():
    print("I'm working sundar gsv")

Теперь в app.py вы можете использовать функцию отображения,

import helper
helper.display()

Выход,

I'm working sundar gsv

ПРИМЕЧАНИЕ. Не нужно указывать расширение .py.

person Sundar Gsv    schedule 25.03.2018

Это может показаться безумным, но вы можете просто создать символическую ссылку на файл, который хотите импортировать, если вы просто создаете для него сценарий оболочки.

person Jonathan    schedule 29.07.2018

Одна очень неизвестная функция Python - это возможность импортировать zip файлы:

library.zip
|-library
|--__init__.py

Файл __init__.py пакета содержит следующее:

def dummy():
    print 'Testing things out...'

Мы можем написать другой скрипт, который может импортировать пакет из zip-архива. Необходимо только добавить zip-файл в sys.path.

import sys
sys.path.append(r'library.zip')

import library

def run():
    library.dummy()

run()
person Farshid Ashouri    schedule 09.05.2019
comment
Какие преимущества дает zip-файл? - person qwr; 16.06.2019

Используя Python 3.5 или новее, вы можете использовать importlib.util для прямого импорта .py файла. в произвольном месте как модуль без необходимости изменять sys.path.

import importlib.util
import sys

def load_module(file_name, module_name)
    spec = importlib.util.spec_from_file_location(module_name, file_name)
    module = importlib.util.module_from_spec(spec)
    sys.modules[module_name] = module
    spec.loader.exec_module(module)
    return module

Параметр file_name должен быть строкой или объектом, подобным пути. Параметр module_name является обязательным, поскольку все загруженные модули Python должны иметь имя модуля (разделенное точками) (например, sys, importlib или importlib.util), но вы можете выбрать любое доступное имя для этого нового модуля.

Вы можете использовать эту функцию так:

my_module = load_module("file.py", "mymod")

После того, как он был импортирован в процесс Python один раз с помощью функции load_module(), модуль будет импортирован с использованием присвоенного ему имени модуля.

# file.py =
print(f"{__name__} imported (file.py)")
# =========

# one.py ==
print(f"{__name__} imported (one.py)")
load_module("file.py", "mymod")
import two
# =========

# two.py ==
print(f"{__name__} imported (two.py)")
import mymod
# =========

Учитывая файлы, указанные выше, вы можете запустить следующую команду, чтобы увидеть, как file.py стал импортируемым.

$ python3 -m one
__main__ imported (one.py)
two imported (two.py)
mymod imported (file.py)

Этот ответ основан на официальной документации Python: importlib: Импорт исходного файла напрямую.

person palotasb    schedule 22.04.2021

import sys
#print(sys.path)
sys.path.append('../input/tokenization')
import tokenization

Чтобы импортировать любой файл .py, вы можете использовать приведенный выше код.

сначала добавьте путь, а затем импортируйте

Примечание. Каталог "../ input / tokenization" содержит файл tokenization.py

person Suguru Naresh    schedule 01.07.2021

Существует много способов, перечисленных выше, но я обнаружил, что просто хочу импортировать содержимое файла и не хочу писать строки и импортировать другие модули. Итак, я придумал способ получить содержимое файла даже с точечным синтаксисом (file.property) в отличие от слияния импортированного файла с вашим.
Прежде всего, вот мой файл, который я импортирую, data.py

    testString= "A string literal to import and test with"


Примечание. Вместо этого вы можете использовать расширение .txt.
В mainfile.py начните с открытия и получения содержимого.

    #!usr/bin/env python3
    Data=open('data.txt','r+').read()

Теперь у вас есть содержимое в виде строки, но попытка доступа к data.testString вызовет ошибку, поскольку data является экземпляром класса str, и даже если у него есть свойство testString, он не будет делать то, что вы ожидали.
Далее , создайте класс. Например (каламбур), ImportedFile

    class ImportedFile:

И вставьте это (с соответствующим отступом):

    exec(data)


И, наконец, переназначьте data следующим образом:

    data=ImportedFile()

Вот и все! Получите доступ, как и для любого другого модуля, набрав print(data.testString), на консоль будет выведено A string literal to import and test with.
Если, однако, вам нужен эквивалент from mod import *, просто отбросьте класс, присвоение экземпляра и отключите exec.

Надеюсь, это поможет :)
-Benji

person Benj    schedule 21.08.2018
comment
Вы серьезно думаете, что чтение содержимого файла в виде строки и последующее ее выполнение - хорошее решение, когда у нас есть все другие решения, опубликованные людьми? - person qwr; 16.06.2019
comment
@qwr Эээээ, я знаю. Многие другие ответы не работают в некоторых ситуациях. Вот почему мне нужен был простой способ, который гарантированно работал. Если вы не можете видеть вещи с другой точки зрения, вам нужно попробовать использовать официальный IDLE. - person Benj; 16.06.2019

from y import * 
  • Скажем, у вас есть файл x и y.
  • Вы хотите импортировать файл y в x.

затем перейдите в свой x-файл и введите указанную выше команду. Чтобы проверить это, просто поместите функцию печати в свой файл y, и когда ваш импорт будет успешным, в файле x он должен распечатать его.

person KSp    schedule 31.01.2021
comment
что, если это в другой иерархии - person Abhishek Anand; 01.03.2021