Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2021, 21:58   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию Проблема импорта функций, если папка и файл называются одинаково

Есть файл data_export.py и папка data_export в которой лежит файл
data_export_expanded.py

folder_name\data_export.py
folder_name\data_export\data_export _expanded.py

мне нужно экспортировать func_name1 из data_export.py и
func_name2 из data_export_expanded.py

Пробую импортировать
Код:
from folder_name.data_export import func_name1
from folder_name.data_export.data_export_expanded import func_name2
падает ошибка, как понимаю из-за того что файл и папка лежат в одной директории
и называются одинаково, как решить проблему, если менять название файлов и папок нельзя,
менять расположение тоже
polin11 вне форума Ответить с цитированием
Старый 20.06.2021, 19:13   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Самого интересовал вопрос импорта своих функций.
Попробовал сделать так:
C:\abc1 - папка, в которой находятся файлы abc1.py и test2.py
Содержание abc1.py:
Код:
def fa1(x, y):
    print('fa1(%d,%d)'%(x,y))

def fb1(z):
    print('fb1(%d)'%(z))
Содержание test2.py:
Код:
def fa2(x, y):
    print('fa2(%d, %d)'%(x,y))

def fb2(z):
    print('fb2(%d)' %(z))
Импорт выполняется в файл tst21.py, который размещается на диске E:\Programs\WinPython\WPy64-3830\Work\Forum.
Содержимое файла:
Код:
import sys

sys.path.insert(0, r'C:\abc1') # Добавить в голову списка
# sys.path.append(r'C:\abc1') # Добавить в хвост списка

from abc1 import fa1
from test2 import fb2

fa1(3,4)
fb2(78)
Это работает.
Вывод результата:

Код:
fa1(3,4)
fb2(78)
Возможно, что это не самый удобный путь (я не программист), но в Сети есть и другие предложения.
И путь, и файл, из которого выполняется импорт, имеют одно название и проблемы нет.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.06.2021, 19:21   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
И путь, и файл, из которого выполняется импорт, имеют одно название и проблемы нет.
Проблема ТС в одинаковом названии модуля и пакета, которые находятся в одной папке.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 20.06.2021, 19:45   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

В папке C:\abc1 находится модуль abc1.py и папка abc1, в которой находится модуль test2.py.
Содержимое модулей описано выше.
Содержимое модуля tst21.py
Код:
import sys
# sys.path.insert(0, r'C:\abc1') # Добавить в голову списка
sys.path.append(r'C:\abc1') # Добавить в хвост списка
sys.path.append(r'C:\abc1\abc1') # Добавить в хвост списка
from abc1 import fa1
from test2 import fb2

fa1(3,4)
fb2(78)
И это тоже работает.
Надеюсь, что этот эксперимент подходит под условие ТС.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 21.06.2021, 04:36   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Надеюсь, что этот эксперимент подходит под условие ТС.
Действительно. Ваш хак сработал:
Код:
import sys
import os

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'folder_name/data_export')))
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'folder_name')))

from data_export import func_name1
from data_export_expanded import func_name2

def main():
    print(func_name1())
    print(func_name2())

main()
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно чтобы папка создавалась в директории, а если такая уже есть, то задать название Timchik46 C# (си шарп) 13 14.09.2016 12:21
Написать программу удобного диалога с поиском данных с помощью процедур и функций, если файл имеет вид таблицы. KNCORP Паскаль, Turbo Pascal, PascalABC.NET 1 06.04.2016 01:46
Перехват АПИ функций с помощью правки таблиц импорта в WinCE 6 urban81 Фриланс 0 16.03.2015 14:28
Что такое файл импорта SeRhy Помощь студентам 1 24.05.2009 14:20
файл и папка StartMis Общие вопросы Delphi 1 19.11.2008 19:48