Найти - Пользователи
Полная версия: путь к папке выше
Начало » Python для новичков » путь к папке выше
1 2 3
Genabox
 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)

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

Вообще, это можно сделать вот так
  
sys.path.insert(1, '..')
Но это тупость, не делай этого. Лучше подучись.
Genabox
да нет просто импортирую файл в папке в приложение
добавляю системный путь еще 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 тоесть добавочный
py.user.next
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
Тут пример
Genabox
ну это разные варианты решения задачи
принт сис патч мне выдал
 ['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
за пример благодарствую
py.user.next
Отстань от sys.path вообще.

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

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

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

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

Genabox
и все работает, мне так проще, нет мусорных файлов которые не привязаны к коду
Ты просто не шаришь, потому что не понимаешь, как питон работает. А чтобы понимать, надо просто книжки по питону читать, а не пытаться наугад что-то там понять. Ты всё равно не поймёшь его сам, потому что он умнее, чем ты думаешь.
Genabox
 import sys
sys.path.insert(2, sys.path[0]+'\\images')
image = Image.open("images\icon.png")

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

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

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

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

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

А вот на счёт sys.path я тебе уже сказал. Все новички делают через sys.path прямо вот точно так же, как вот это ты сейчас делаешь. Как ты думаешь, чем это заканчивается в итоге? Я тебе скажу: нет у них никаких программ в итоге.
Genabox
списабо воспользуюсь Вашим примером
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB