Установка 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