Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2016 21:52:35

fshshsh
Зарегистрирован: 2015-10-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Зачем нужно прописывать пути и при чём домашняя директория?

Работаю в вндовс, но, думаю, в линукс так же. На пайтон начал недавно (хоть и зареган здесь давно) - до этого в делфи и билдере простенькие GUI писал.
Есть интерпретатор, есть библиотеки. Есть консоль.
Пути прописывать надо только для удобства работы в консоли? Для чего вообще существуют системные переменные? Что значит “домашняя директория”? Какую роль они играют? Какие ошибки бывают из-за них? А если несколько версия пайтона в системе стоит? Системная переменная PATH одна.

Офлайн

#2 Авг. 11, 2016 23:05:52

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Зачем нужно прописывать пути и при чём домашняя директория?

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

По поводу удобства. Например вы хотите из программы запустить notepad.exe
сравните код на питоне:
 subprocess.Popen(r"C:\windows\............................System32\notepad.exe")
subprocess.Popen(r"notepad.exe")
fshshsh
Для чего вообще существуют системные переменные?
Для централизованного управления поведением программ.
В примере выше, если вы захотели переместить у себя notepad.exe в другую папку то без переменных окружения вы должны будете поправить все свои программы. А с их использованием только переменную окружения.
fshshsh
Что значит “домашняя директория”?
У компа может быть много пользователей. Когда вы меняете пользователя (ну например заходите под своим именем), в том числе и переменные окружения подстраиваются под вас (у каждого пользователя свой набор). Домашняя папка это текущая директория которая устанавливается после логина данного пользователя. Это в первом приближении. В эту папку ставятся те программы которые вы ставите “только для себя”.

fshshsh
Какие ошибки бывают из-за них?
??? никаких. Если вы понимаете что делаете то никаких ошибок не бывает ни с переменными окружения ни без них.
fshshsh
А если несколько версия пайтона в системе стоит? Системная переменная PATH одна.
Она не одна. Она индивидуальная для каждого пользователя, для каждого порождаемого процесса вы можете ее модифицировать.
Вы можете запускать скрипты командой
 some.py
а не
 python some.py
В этом случае раннер питона (есть такая штука) прочитает из первой строки файла some.py каким питоном надо запускать ваш код.
Но решений может быть много. Например можете разных пользователей сделать под разные питоны общепринятый подход - использование virtualenv, можете поставить



Офлайн

#3 Авг. 12, 2016 02:31:27

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

Зачем нужно прописывать пути и при чём домашняя директория?

fshshsh
Есть интерпретатор, есть библиотеки. Есть консоль.
Пути прописывать надо только для удобства работы в консоли?
Похоже, ты не знаешь, чем консоль отличается от командной оболочки. Консоль - это то место, где пользователь может подключаться к операционной системе. Командная оболочка - это то, что запускается в консоли и распознаёт язык команд для самой себя и для операционной системы.

fshshsh
Для чего вообще существуют системные переменные? Что значит “домашняя директория”? Какую роль они играют?
Переменные окружения - это пары, которые помнит командная оболочка между вызовами программ.

Вот, например, программа выводит три строки из файла
[guest@localhost ~]$ head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[guest@localhost ~]$

Здесь мы используем переменные командной оболочки (переменные среды)
[guest@localhost ~]$ s1=/etc/passwd
[guest@localhost ~]$ s2=3
[guest@localhost ~]$
[guest@localhost ~]$ head -$s2 $s1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[guest@localhost ~]$

Здесь мы используем переменные командной оболочки для вывода текста
[guest@localhost ~]$ s1=string1
[guest@localhost ~]$ s2=string2
[guest@localhost ~]$
[guest@localhost ~]$ echo $s1 $s2
string1 string2
[guest@localhost ~]$

HOME и PATH - это точно такие же переменные, просто они записаны большими буквами. Вообще, если переменная записана большими буквами, значит она используется какими-то программами (служебная переменная). Ты можешь менять служебные переменные, они при следующей загрузке снова восстановятся.

А зачем нужны они - ну, ты пишешь программу, которая сохраняет файлы в какой-то каталог. Ты можешь использовать путь к этому каталогу, а можешь использовать переменную, в которой записан путь к этому каталогу. Когда программа написана, тебе может понадобиться переместить сам каталог куда-нибудь. И вот тут возникает загвоздка: если путь к каталогу зашит в программу, она перестанет работать, если ты его переместишь; а если у тебя путь к каталогу сделан в виде переменной, то ты просто эту переменную меняешь - и программа видит каталог по новому пути. (Это называется абстрагированием.)



Отредактировано py.user.next (Авг. 12, 2016 02:41:53)

Офлайн

#4 Авг. 15, 2016 09:54:01

fshshsh
Зарегистрирован: 2015-10-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Зачем нужно прописывать пути и при чём домашняя директория?

py.user.next
HOME и PATH - это точно такие же переменные, просто они записаны большими буквами. Вообще, если переменная записана большими буквами, значит она используется какими-то программами (служебная переменная)
А каков алгоритм системы по поиску нужной записи? Например, в коде либо в командной оболочке прописал вызов того же “notepad.exe”. Проверяются HOME, PATH в переменных среды пользователя, затем в системных переменных? А название переменной имеет значение? С андроид студио была такая штука при настройке: вручную нужно было создавать отдельную переменную среды со своим названием.

doza_and
shshsh
А если несколько версия пайтона в системе стоит? Системная переменная PATH одна.
Она не одна. Она индивидуальная для каждого пользователя, для каждого порождаемого процесса вы можете ее модифицировать.
А если 2 версии под одним пользователем? С virtualenv разобрался. Сначала поставил пайтон 3.5, потом pip install virtualenv. Теперь буду только в виртуалках работать, как добропорядочный разработчик.

Отредактировано fshshsh (Авг. 15, 2016 10:01:45)

Офлайн

#5 Авг. 15, 2016 14:52:35

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

Зачем нужно прописывать пути и при чём домашняя директория?

fshshsh
Например, в коде либо в командной оболочке прописал вызов того же “notepad.exe”. Проверяются HOME, PATH в переменных среды пользователя, затем в системных переменных?
Если записал вызов какой-то программы, то существует правило.

Сам вызов программы ты пишешь в оболочке, и оболочка создаёт процесс для этой программы и переходит в него, либо заменяет свой процесс на процесс этой программы. Когда ты пишешь имя программы в оболочке, для оболочки это просто строка. Но то, как она записана (синтаксис), сообщает оболочке, что это не просто строка, а вызов программы. Раз это вызов программы, оболочка пытается её найти на диске. Вот для этого и существует переменная PATH. Она является служебной переменной оболочки. А так как её устанавливает система (когда запускает оболочку), то она называется системной переменной среды. Оболочка раскладывает значение этой переменной на части (строку раскладывает на строки) и каждую часть рассматривает как путь на диске. И вот в каждом из этих путей она по порядку пытается найти эту программу. Когда находит, запускает новый процесс и переходит в него (а по завершении возвращается обратно в свой процесс).

А служебная переменная оболочки HOME не такая важная и часто используемая. Но по ней программы ориентируются, где находится каталог текущего пользователя системы (из под которого они запускаются). Часто программы сохраняют какие-то свои данные в каталоге пользователя, поэтому им надо знать, в какой каталог сохранять. Так у каждого пользователя, в его собственном каталоге могут храниться его индивидуальные настройки для одной и той же программы. Она тоже называется системной переменной среды, потому что устанавливается системой (но пользоваться ею может и пользователь).



Отредактировано py.user.next (Авг. 15, 2016 14:56:04)

Офлайн

#6 Авг. 17, 2016 09:34:05

fshshsh
Зарегистрирован: 2015-10-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Зачем нужно прописывать пути и при чём домашняя директория?

py.user.next
Часто программы сохраняют какие-то свои данные в каталоге пользователя, поэтому им надо знать, в какой каталог сохранять.
На винде учетка кириллицей. При установке 3.5.2 он по умолчанию туда предложил поставиться, я выбрал корень С:\ - читал, что у разных программ могут быть глюки из-за кириллицы в пути. Возможен такой трюк: моя домашняя директория, получается, имеет кириллицу в названии, поэтому создать системную переменную HOME и прописать там другой путь, в котором кириллицы нет? Если путь к домашней папке хранится только в системных переменных.. Хотя HOME у меня нигде нет, а инсталлятор пайтона все равно нашел мою домашнюю папку. Видимо, инфа о домашнем каталоге еще где-то хранится. В винде знаю еще одно глобальное хранилище инфы - реестр.

Отредактировано fshshsh (Авг. 17, 2016 09:39:57)

Офлайн

#7 Авг. 17, 2016 10:12:05

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Зачем нужно прописывать пути и при чём домашняя директория?

fshshsh
Хотя HOME у меня нигде нет, а инсталлятор пайтона все равно нашел мою домашнюю папку. Видимо, инфа о домашнем каталоге еще где-то хранится.
HOME к домашней папке отношения не имеет.
C:\>echo %homepath%
\Users\user
C:\>echo %userprofile%
C:\Users\user
C:\>
https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D1%8B_Windows

Офлайн

#8 Авг. 17, 2016 10:25:47

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

Зачем нужно прописывать пути и при чём домашняя директория?

fshshsh
Хотя HOME у меня нигде нет
Это в лине
[guest@localhost ~]$ echo $HOME
/home/guest
[guest@localhost ~]$
В винде можешь посмотреть переменные среды, открыв командную строку и там набрав set.



Отредактировано py.user.next (Авг. 17, 2016 10:25:58)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version