Установка pip в DSM/Synology

Я работал над программой на Python 3 последние несколько месяцев. Я проверял это в течение некоторого времени, и это, кажется, работает как должно. Поэтому я попытался запустить его на DSM/Synology(модель: DS209+, версия: DSM 4.2-3259). К сожалению, я ничего не знаю об этой среде. Поэтому я установил python3 (3.3.2-0005) из Центра пакетов Synology и запустил его. Запуск моего кода работает. Единственная проблема в том, что моя программа использует библиотеку "запросов". Однако я просто не могу запустить пипс. Для установки pip я попытался использовать следующую строку в PuTTY.

curl -k https://bootstrap.pypa.io/get-pip.py | python3

Я ожидаю, что pip загрузит / установит и использует его для получения библиотеки запросов. Но потом это происходит, и я не знаю, что я сделал не так:

The directory '/var/services/homes/admin/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/var/services/homes/admin/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    100% |################################| 1.3MB 131kB/s
Collecting setuptools
  Downloading setuptools-38.2.4-py2.py3-none-any.whl (489kB)
    100% |################################| 491kB 305kB/s
Collecting wheel
  Downloading wheel-0.30.0-py2.py3-none-any.whl (49kB)
    100% |################################| 51kB 296kB/s
Installing collected packages: pip, setuptools, wheel
Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.3/distutils/sysconfig.py", line 449, in _init_posix
    with open(filename) as file:
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/include/python3.3m/pyconfig.h'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tmp/tmpdqp31o/pip.zip/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/tmp/tmpdqp31o/pip.zip/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/tmp/tmpdqp31o/pip.zip/pip/req/req_set.py", line 784, in install
    **kwargs
  File "/tmp/tmpdqp31o/pip.zip/pip/req/req_install.py", line 851, in install
    self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
  File "/tmp/tmpdqp31o/pip.zip/pip/req/req_install.py", line 1064, in move_wheel_files
    isolated=self.isolated,
  File "/tmp/tmpdqp31o/pip.zip/pip/wheel.py", line 247, in move_wheel_files
    prefix=prefix,
  File "/tmp/tmpdqp31o/pip.zip/pip/locations.py", line 153, in distutils_scheme
    i.finalize_options()
  File "/usr/local/lib/python3.3/distutils/command/install.py", line 313, in finalize_options
    (prefix, exec_prefix) = get_config_vars('prefix', 'exec_prefix')
  File "/usr/local/lib/python3.3/distutils/sysconfig.py", line 531, in get_config_vars
    func()
  File "/usr/local/lib/python3.3/distutils/sysconfig.py", line 456, in _init_posix
    raise DistutilsPlatformError(my_msg)
distutils.errors.DistutilsPlatformError: invalid Python installation: unable to open /usr/local/include/python3.3m/pyconfig.h (No such file or directory)

Кажется, что использование sudo -H решит проблему. Однако я понятия не имею, как это сделать и с чего начать. Поиск в Google не очень помог, потому что вещи, которые я нашел, были слишком расплывчаты для меня, или у них уже была проблема с pip. Надеюсь, этот вопрос не слишком расплывчатый.

3 ответа

При использовании нового venv pip доступен автоматически. Например:

user@host:~$ python3 -m venv env
user@host:~$ . env/bin/activate
(env) user@host:~$ pip --version
pip 7.1.2 from /volume1/homes/user/env/lib/python3.5/site-packages (python 3.5)

После этого вы можете обновить pip до текущей версии:

user@host:~$ pip install --upgrade pip
...
Successfully installed pip-18.0

Это также имеет то преимущество, что установка пакетов с помощью pip не может сломать системный питон.

Для автоматической активации вашей среды вы можете создать .profile:

user@host:~$ touch ~/.profile
user@host:~$ chmod u=rwx ~/.profile

а затем сделать его содержимое выглядит так:

#!/bin/sh
. env/bin/activate

Как уже упоминалось @hoefling, это проблема привилегий.

Войти через SSH

ssh user@synology

и введите пароль пользователя.

Получить права администратора

sudo su

и введите пароль sudo.

Получить установочный файл

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

и запустите установочный файл.

python get-pip.py

Дайте мне знать, если это сработало для вас.

Просто войдите в Synology через SSH для прав администратора, а затем sudo -i

и вот, что я получаю после успешного входа в систему:

root@x:~# curl -k https://bootstrap.pypa.io/get-pip.py | python3
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1558k  100 1558k    0     0  1076k      0  0:00:01  0:00:01 --:--:-- 1076k
Collecting pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 506kB/s
Collecting setuptools
  Downloading setuptools-38.4.0-py2.py3-none-any.whl (489kB)
    100% |████████████████████████████████| 491kB 1.1MB/s
Collecting wheel
  Using cached wheel-0.30.0-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-9.0.1 setuptools-38.4.0 wheel-0.30.0

Я установил пип следующим образом:

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

Однако некоторые библиотеки не устанавливаются, так как последняя версия Python от Synology - 3.5. Если это может быть полезно для всех, я использовалeasy.install пакет найден в @appstore/py3k/usr/local/binдля установки пакетов pip; некоторые из них (например, телепот) не устанавливаются с помощью pip из-за некоторых проблем с aiohttp.

В моем блоке синологии доступен только Python 3.4.1, очень старый блок, который я не обновлял.

использование get-pip.py не работает, потому что в настоящее время требуется python 3.5 или выше. Однако следующее сработало:

python3 -m securepip --default-pip

Другие вопросы по тегам