Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 29, 2022 18:56:18

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

путь к папке выше

 sys.path.insert(1, sys.path[0]+'..\\')
from voice_command import *

terminal
File “d:\discord\sql\sqlquerty.py”, line 8
sys.path.insert(1, sys.path+'..\')
^
SyntaxError: unterminated string literal (detected at line 8)

как правильно писать путь к корневой папке
все перепробовал -не видет

Офлайн

#2 Дек. 29, 2022 21:16:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

путь к папке выше

Genabox
как правильно писать путь к корневой папке
Если тебе нужно редактировать sys.path, значит ты что-то неправильно делаешь. Скорее всего, у тебя неправильно организована архитектура приложения.

Вообще, это можно сделать вот так
  
sys.path.insert(1, '..')
Но это тупость, не делай этого. Лучше подучись.



Отредактировано py.user.next (Дек. 29, 2022 21:18:24)

Офлайн

#3 Дек. 30, 2022 02:12:45

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

путь к папке выше

да нет просто импортирую файл в папке в приложение
добавляю системный путь еще 1 а не меняю его
так работает

 sys.path.insert(1, sys.path[0]+'\\sql')
import sqlquerty
а файл из соседней папки вызвать невыходит
(это файл access из папки access с доступом к базе)

 sys.path.insert(1, '..')
не понял как тут путь к access прописать, двоеточие для поднятия в корень не видет питон
 sys.path.insert(1, '../access')
так не работает почему и спрашиваю
системный путь это 0 а тут 1 тоесть добавочный

Отредактировано Genabox (Дек. 30, 2022 03:10:40)

Офлайн

#4 Дек. 30, 2022 05:13:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

путь к папке выше

Genabox
да нет просто импортирую файл в папке в приложение
добавляю системный путь еще 1 а не меняю его
так работает
Не, надо сделать пакет. Надо сделать пакет, в котором пакеты, в которых модули. И всё это делается без всяких добавлений путей.

Genabox
системный путь это 0 а тут 1 тоесть добавочный
sys.path - это обычный список строк. По нулевому индексу в нём находится пустая строка, которая означает текущую директорию. Поэтому твои эти сложения выполняют фактически действия
 '' + '\\sql'
Это очень умно? Ну, прибавлять к пустой строке какую-то строку.

Можешь сделать
  
print(sys.path)
и просто посмотреть на эти строки.

В общем, ты должен директорию sql превратить в пакет. Для этого достаточно в неё положить пустой файл __init__.py . Потом ты её импортируешь как пакет, а в этом пакете у тебя уже модуль лежит в виде файла somefile.py .

Тогда это будет записываться так
  
from sql import somefile
 
somefile.func()



Отредактировано py.user.next (Дек. 30, 2022 05:18:22)

Офлайн

#5 Дек. 30, 2022 05:21:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

путь к папке выше

Тут пример



Прикреплённый файлы:
attachment package.tar.gz (599 байт)

Офлайн

#6 Дек. 30, 2022 06:42:13

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

путь к папке выше

ну это разные варианты решения задачи
принт сис патч мне выдал

 ['d:\\discord', 'd:\\discord\\access', 'd:\\discord\\sql', 'C:\\Users\\Gena\\AppData\\Local\\Programs\\Python\\Python310\\python310.zip', 'C:\\Users\\Gena\\AppData\\Local\\Programs\\Python\\Python310\\DLLs', 'C:\\Users\\Gena\\AppData\\Local\\Programs\\Python\\Python310\\lib', 'C:\\Users\\Gena\\AppData\\Local\\Programs\\Python\\Python310', 'C:\\Users\\Gena\\.virtualenvs\\discord-q4ERoUCO', 'C:\\Users\\Gena\\.virtualenvs\\discord-q4ERoUCO\\lib\\site-packages', 'C:\\Users\\Gena\\.virtualenvs\\discord-q4ERoUCO\\lib\\site-packages\\win32', 'C:\\Users\\Gena\\.virtualenvs\\discord-q4ERoUCO\\lib\\site-packages\\win32\\lib', 'C:\\Users\\Gena\\.virtualenvs\\discord-q4ERoUCO\\lib\\site-packages\\Pythonwin']

вот именно нужные папки и получилос прописать
а когда я импортирую из папки SQL
я пишу
 sys.path.insert(1, sys.path[0]+'\\sql')
import sqlquerty
from sqlquerty import *
где sqlquerty это sqlquerty.py
и все работает, мне так проще, нет мусорных файлов которые не привязаны к коду
но я не могу прочитать из этого файла данные файла соседней папки access
за пример благодарствую

Офлайн

#7 Дек. 30, 2022 09:38:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

путь к папке выше

Отстань от sys.path вообще.

Сделай пакет.

Пример я тебе скинул. Пакетом в примере является директория sql.

Импортировать все имена из модуля пакета можно и так

  
from sql.somefile import *
 
func()
Здесь пакет - это sql. В пакете находится модуль somefile. И из этого модуля мы импортируем все имена. Одно из этих имён - имя функции func(). Поэтому мы можем её вызвать напрямую после этого импортирования.

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

Genabox
и все работает, мне так проще, нет мусорных файлов которые не привязаны к коду
Ты просто не шаришь, потому что не понимаешь, как питон работает. А чтобы понимать, надо просто книжки по питону читать, а не пытаться наугад что-то там понять. Ты всё равно не поймёшь его сам, потому что он умнее, чем ты думаешь.



Отредактировано py.user.next (Дек. 30, 2022 09:39:28)

Офлайн

#8 Дек. 30, 2022 15:57:52

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

путь к папке выше

 import sys
sys.path.insert(2, sys.path[0]+'\\images')
image = Image.open("images\icon.png")

да нет
все еще проще
пишешь 3 строчки и чатаешь любые файлы в папках
делать пакет для картинки или 3 строчек рут доступа
да еще из имени папки и пути делать классоваю переменную

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

Отредактировано Genabox (Дек. 30, 2022 20:33:28)

Офлайн

#9 Дек. 30, 2022 22:49:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

путь к папке выше

Genabox
пишешь 3 строчки и чатаешь любые файлы в папках
Сейчас три, потом ещё три, потом ещё три, потом ещё и так далее. Короче, так ты будешь писать в три раза больше, чем если по-нормальному. В этом деле скупой платит дважды.

Закончится всё тем, что ты зайдёшь в тупик, не сможешь продолжать больше писать эту программу, и из-за этого тебе придётся её вообще всю заново писать, с самого начала. И вот там-то ты подумаешь “наверное, надо лучше пакеты сделать, как мне говорили, когда я что-то там думал про себя”.

Genabox
делать пакет для картинки или 3 строчек рут доступа
Это сейчас у тебя три строчки. Но ты смотришь только на момент сейчас, а программа-то живёт ещё и в будущем. Завтра тебе надо будет исправлять баг какой-нибудь в ней, который ты пропустил сегодня и из-за которого завтра просто она вся работать не будет, а ты этот баг не сможешь исправить, потому что исправление бага потребует полного переписывания всей программы. То же самое будет, когда надо будет не баг исправлять, а какую-то фичу добавлять. Ладно, фичу-то можно и не добавлять, а вот если баг не исправлять, который рушит всю работу, то в итоге эта программа вообще будет бесполезна и будет просто из себя представлять кучу потраченного времени и только. Вот из-за этого всего программу надо писать правильно изначально, даже если там одна строчка кода всего лишь.

Genabox
да еще из имени папки и пути делать классоваю переменную
Это слишком сложно для тебя, но я тебе показываю правильный способ.

А вот на счёт sys.path я тебе уже сказал. Все новички делают через sys.path прямо вот точно так же, как вот это ты сейчас делаешь. Как ты думаешь, чем это заканчивается в итоге? Я тебе скажу: нет у них никаких программ в итоге.



Отредактировано py.user.next (Дек. 30, 2022 22:53:51)

Офлайн

#10 Дек. 31, 2022 00:37:23

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

путь к папке выше

списабо воспользуюсь Вашим примером

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version