1

Тема: Python - налаштування середовища під Windows без прав адміна

Всім привіт.

Встановив під Windows портейбл версію git bash, Python 3.10 і поки що застряг на етапі встановлення pip.
Виявляється, що додати потрібну директорію в системну змінну вінди PATH не можна без прав адміна, а без цього pip не працює навіть після повідомлення про успішне встановлення.

$ pip --version
Traceback (most recent call last):
  File "runpy.py", line 196, in _run_module_as_main
  File "runpy.py", line 86, in _run_code
  File "W:\python\python-3.10.6-embed-amd64\Scripts\pip.exe\__main__.py", line 4, in <module>
ModuleNotFoundError: No module named 'pip'

Пробував декілька воркераундів, зокрема використання PATH в віндовому файлі ~/.bashrc (так як я використовую git bash, то вважав що змінна в цьому файлі буде задіяна, але ні).

PATH=$PATH:/W/python/python-3.10.6-embed-amd64:/W:\python\python-3.10.6-embed-amd64/Scripts

Також пробував вказати PATH у файлику python130._pth

python310.zip
.

# Uncomment to run site.main() automatically
#import site
/w/python/python-3.10.6-embed-amd64/
/w/python/python-3.10.6-embed-amd64/DLLs
/w/python/python-3.10.6-embed-amd64/lib
/w/python/python-3.10.6-embed-amd64/lib/plat-win
/w/python/python-3.10.6-embed-amd64/lib/site-packages
/w/python/python-3.10.6-embed-amd64/Scripts
w:\python\python-3.10.6-embed-amd64\Scripts

Використовую два типи шляхів:
1) w:\folder1 (стандарт для вінди)
2) /w/folder1 (саме так шляхи виглядають в git bash - схоже як в лінуксах)

Поки що більше не розумію що ще можна зробити. Ґуґлю і пробую варіанти.

2

Re: Python - налаштування середовища під Windows без прав адміна

А якщо викликати pip через Python?

python.exe -m pip --version

3

Re: Python - налаштування середовища під Windows без прав адміна

koala написав:

А якщо викликати pip через Python?

python.exe -m pip --version

Не працює:

$ python -m pip --version
W:\python\python-3.10.6-embed-amd64\python.exe: No module named pip

Але знайшов інший воркераунд - встановив miniconda, щоправда там в останній версії зараз лише Python 3.9, але pip працює.

4

Re: Python - налаштування середовища під Windows без прав адміна

падає kernel в Jupyter Notebook - paths.py - Access is denied
Traceback (most recent call last):
  File "W:\mini_conda\lib\site-packages\tornado\web.py", line 1713, in _execute
    result = await result
  File "W:\mini_conda\lib\asyncio\tasks.py", line 328, in __wakeup
    future.result()
  File "W:\mini_conda\lib\site-packages\tornado\gen.py", line 776, in run
    yielded = self.gen.throw(*exc_info)  # type: ignore
  File "W:\mini_conda\lib\site-packages\notebook\services\sessions\handlers.py", line 74, in post
    model = yield maybe_future(
  File "W:\mini_conda\lib\site-packages\tornado\gen.py", line 769, in run
    value = future.result()
  File "W:\mini_conda\lib\site-packages\tornado\gen.py", line 776, in run
    yielded = self.gen.throw(*exc_info)  # type: ignore
  File "W:\mini_conda\lib\site-packages\notebook\services\sessions\sessionmanager.py", line 98, in create_session
    kernel_id = yield self.start_kernel_for_session(session_id, path, name, type, kernel_name)
  File "W:\mini_conda\lib\site-packages\tornado\gen.py", line 769, in run
    value = future.result()
  File "W:\mini_conda\lib\site-packages\tornado\gen.py", line 776, in run
    yielded = self.gen.throw(*exc_info)  # type: ignore
  File "W:\mini_conda\lib\site-packages\notebook\services\sessions\sessionmanager.py", line 110, in start_kernel_for_session
    kernel_id = yield maybe_future(
  File "W:\mini_conda\lib\site-packages\tornado\gen.py", line 769, in run
    value = future.result()
  File "W:\mini_conda\lib\asyncio\futures.py", line 201, in result
    raise self._exception
  File "W:\mini_conda\lib\asyncio\tasks.py", line 256, in __step
    result = coro.send(None)
  File "W:\mini_conda\lib\site-packages\notebook\services\kernels\kernelmanager.py", line 176, in start_kernel
    kernel_id = await maybe_future(self.pinned_superclass.start_kernel(self, **kwargs))
  File "W:\mini_conda\lib\site-packages\jupyter_client\utils.py", line 30, in wrapped
    raise e
  File "W:\mini_conda\lib\site-packages\jupyter_client\utils.py", line 27, in wrapped
    return loop.run_until_complete(future)
  File "W:\mini_conda\lib\site-packages\nest_asyncio.py", line 89, in run_until_complete
    return f.result()
  File "W:\mini_conda\lib\asyncio\futures.py", line 201, in result
    raise self._exception
  File "W:\mini_conda\lib\asyncio\tasks.py", line 256, in __step
    result = coro.send(None)
  File "W:\mini_conda\lib\site-packages\jupyter_client\multikernelmanager.py", line 214, in _async_start_kernel
    starter = ensure_async(km.start_kernel(**kwargs))
  File "W:\mini_conda\lib\site-packages\jupyter_client\utils.py", line 30, in wrapped
    raise e
  File "W:\mini_conda\lib\site-packages\jupyter_client\utils.py", line 27, in wrapped
    return loop.run_until_complete(future)
  File "W:\mini_conda\lib\site-packages\nest_asyncio.py", line 89, in run_until_complete
    return f.result()
  File "W:\mini_conda\lib\asyncio\futures.py", line 201, in result
    raise self._exception
  File "W:\mini_conda\lib\asyncio\tasks.py", line 256, in __step
    result = coro.send(None)
  File "W:\mini_conda\lib\site-packages\jupyter_client\manager.py", line 83, in wrapper
    raise e
  File "W:\mini_conda\lib\site-packages\jupyter_client\manager.py", line 75, in wrapper
    out = await method(self, *args, **kwargs)
  File "W:\mini_conda\lib\site-packages\jupyter_client\manager.py", line 385, in _async_start_kernel
    kernel_cmd, kw = await ensure_async(self.pre_start_kernel(**kw))
  File "W:\mini_conda\lib\site-packages\jupyter_client\utils.py", line 30, in wrapped
    raise e
  File "W:\mini_conda\lib\site-packages\jupyter_client\utils.py", line 27, in wrapped
    return loop.run_until_complete(future)
  File "W:\mini_conda\lib\site-packages\nest_asyncio.py", line 89, in run_until_complete
    return f.result()
  File "W:\mini_conda\lib\asyncio\futures.py", line 201, in result
    raise self._exception
  File "W:\mini_conda\lib\asyncio\tasks.py", line 256, in __step
    result = coro.send(None)
  File "W:\mini_conda\lib\site-packages\jupyter_client\manager.py", line 351, in _async_pre_start_kernel
    kw = await self.provisioner.pre_launch(**kw)
  File "W:\mini_conda\lib\site-packages\jupyter_client\provisioning\local_provisioner.py", line 190, in pre_launch
    km.write_connection_file()
  File "W:\mini_conda\lib\site-packages\jupyter_client\connect.py", line 503, in write_connection_file
    self.connection_file, cfg = write_connection_file(
  File "W:\mini_conda\lib\site-packages\jupyter_client\connect.py", line 164, in write_connection_file
    with secure_write(fname) as f:
  File "W:\mini_conda\lib\contextlib.py", line 119, in __enter__
    return next(self.gen)
  File "W:\mini_conda\lib\site-packages\jupyter_core\paths.py", line 896, in secure_write
    win32_restrict_file_to_user(fname)
  File "W:\mini_conda\lib\site-packages\jupyter_core\paths.py", line 461, in win32_restrict_file_to_user
    win32security.SetFileSecurity(fname, win32security.DACL_SECURITY_INFORMATION, sd)
pywintypes.error: (5, 'SetFileSecurity', 'Access is denied.')

5

Re: Python - налаштування середовища під Windows без прав адміна

Системні змінні можна змінювати як глобально для усієї системи, так і для поточного юзера. Правда я знаю лише як це через юайку робиться, але через командний рядок також має бути варіант.

Подякували: leofun011

6 Востаннє редагувалося P.Y. (23.08.2022 17:08:16)

Re: Python - налаштування середовища під Windows без прав адміна

Виявляється, що додати потрібну директорію в системну змінну вінди PATH не можна без прав адміна

Справді? Через налаштування чи системний реєстр — мабуть, заборонено, але тимчасово в межах сеансу командного рядка ніби має завжди працювати (просто командою set PATH=B:\аша\директорія;%PATH% , якщо через cmd.exe, після чого робите з цього ж вікна всі необхідні дії; втім, може, в баші є якісь обмеження на аналогічну команду, не перевіряв).

Наскільки я пам'ятаю, на пошук модулів пітоном впливає не PATH, а PYTHONPATH. Але, здається, в embed-дистрибутивах вона примусово переписується при запуску — колись я пробував був достукатись до неї в python-3.9.0-embed-win32. Здається, запустити , підставивши свої значення в PYTHONPATH, мені вдалось якимось чином, але python при цьому не бачив своїх бібліотек. (Зрештою, кинув цю невдячну справу й перейшов на трохи старішу версію, для якої був нормальний інсталяшник, сумісний з моєю віндою. Можливо, зміг би розібратись, якби покопався глибше).

З довідки:

PYTHONPATH   : ';'-separated list of directories prefixed to the
               default module search path.  The result is sys.path.
PYTHONHOME   : alternate <prefix> directory (or <prefix>;<exec_prefix>).
               The default module search path uses <prefix>\python{major}{minor}.

Подякували: leofun011

7 Востаннє редагувалося frz (23.08.2022 21:35:57)

Re: Python - налаштування середовища під Windows без прав адміна

Пробую anaconda, бо там детальніше описано як саме встановлювати системні змінні (у порівнянні з miniconda).

Бо якщо запускати просто команду

set variable1=value1

чомусь не працює...

8

Re: Python - налаштування середовища під Windows без прав адміна

Поки що пішов шляхом встановлення python i pip під лінукс, бо з вінди все одно конектимося до лінуксу через ssh-клієнт.

Тепер залишилося встановити jupyter notebook, але кожен потрібний пакет потрібно збирати вручну. Термінал відрізаний від зовнішнього світу і автоматичне встановлення не працює. Тому скачую джерельні коди, компілюю і тоді вже встановлюю. Насправді дещо цікавий процес, ще один квест.

9

Re: Python - налаштування середовища під Windows без прав адміна

Скачування джерельних кодів ... ./configure ... make ... make check ... make test ... sudo make install ...

наступна ітерація ... не вистачає модуля котрий був неочевидно необхідний досі ...

скачування джерельних кодів ... ./configure ... make ... make check ... make test ... sudo make install ...

і так далі ... захоплююче з одного боку.

10

Re: Python - налаштування середовища під Windows без прав адміна

З jupyter notebook поки що зупинився. Потрібно встановити вже не через pip (на рівні користувача) а на рівні системи пакети libxml2-devel i libxslt-devel, які тягнуть за собою багато залежностей і можна щось поламати, а цим хостом користується багато інших людей.

Мав вже раніше такий досвід, буду працювати в пайтоні в консолі і виводити результат в лог-файли. Незручно, але поки що так...

11 Востаннє редагувалося Pernat1y (21.09.2022 14:36:37)

Re: Python - налаштування середовища під Windows без прав адміна

Завантажуєте Python
Розкоментовуєте рядок в "python310._pth"

import site

Завантажуєте pip

https://bootstrap.pypa.io/get-pip.py

Встановлюєте pip

.\python.exe ..\get-pip.py

pip3.exe магічним чином з'являється в .\Scripts\

Це все, типу, в документації PIP'a є - https://pip.pypa.io/en/stable/installation/

https://replace.org.ua/uploads/images/5261/1c6cf9e3f70bac762852a0195e499bab.png



frz написав:

Потрібно встановити вже не через pip (на рівні користувача) а на рівні системи пакети libxml2-devel i libxslt-devel, які тягнуть за собою багато залежностей і можна щось поламати, а цим хостом користується багато інших людей.

Для цього є venv.
https://docs.python.org/3/library/venv.html

12 Востаннє редагувалося frz (21.09.2022 15:01:42)

Re: Python - налаштування середовища під Windows без прав адміна

Pernat1y
Із встановленням пакетів через pip локально для користувача і без доступу до інтернету вже розібрався.
Потрібно скачати потрібні пакети звідси: https://pypi.org/project/pip/
Далі потрібно завантажити ці пакети на потрібний хост через ssh.
Потім виконати таку команду:

/home/user1/python310/python -m pip install package1-version123.whl -f ./ --no index

де package1-version123.whl - потрібний нам пакет.

Але це простий варіант, якщо потрібний нам пакет не тягне купу залежностей, які тоді доведеться скачувати вручну (сумнівне задоволення, якщо залежностей багато десятків). В такому випадку необхідний хост із тією ж версією операційки, тоді ґуґлити "pip download package for offline install".

А от якщо потрібен пакет на рівні операційки, тобто встановлюється за допомогою sudo apt-get install (дебіан і похідні) або sudo zypper install (suse linux), тоді залежно від того що це за пакет, простої відповіді нема, в багатьох випадках можна скомпілювати з джерельних кодів і далі встановити path до бінарника, однак у випадку із комерційною версією suse linux деякі бібліотеки повинні бути саме в потрібному місці.

13

Re: Python - налаштування середовища під Windows без прав адміна

Деякі пакети pip потребують прав адміна.
Раджу саму консольку запускати від імені адміна, тоді не буде виникати траблів з встановленням і прописуванням шляхів самим піпом.

14

Re: Python - налаштування середовища під Windows без прав адміна

Droid 77 написав:

Деякі пакети pip потребують прав адміна.
Раджу саму консольку запускати від імені адміна, тоді не буде виникати траблів з встановленням і прописуванням шляхів самим піпом.

Загалом притримуюся принципу мінімалізму прав, тому роблю все що можливо без sudo - доти, доки це вдається з різними воркераундами. На тому ж хості працює багато інших користувачів, намагаюся нікому нічого не поламати. Хоча саме у випадку python - схоже, ним ніхто не користується на потрібних мені хостах, бо третій пайтон був якоїсь дуже древньої версії.

15 Востаннє редагувалося Droid 77 (21.09.2022 22:38:01)

Re: Python - налаштування середовища під Windows без прав адміна

Такий він той pip. Іноді без sudo не ставить деякі пакети.

16

Re: Python - налаштування середовища під Windows без прав адміна

Droid 77 написав:

Такий він той pip. Іноді без sudo не ставить деякі пакети.

Із sudo, та ще й із доступом до інтернету - всі можуть. А от спробуйте без цього всього...

17

Re: Python - налаштування середовища під Windows без прав адміна

На вінді я послуговуюсь MSYS2 - чудова річ.