Как я могу перенести файл из SFTP с помощью python 3.6

#python #python-3.x #sftp

#python #python-3.x #sftp

Вопрос:

Я хотел бы использовать paramiko для передачи файлов SFTP в Python 3.6. Я знаю, что paramiko зависит от PyCrypto и прочитал о проблемах с установкой PyCrypto в Python 3.6. Хотя я видел ряд вопросов по этой теме, я не нашел решения для успешной передачи файлов SFTP в Python 3.6.

Мой первый вопрос: возможно ли использовать Python 3.6 для передачи файлов SFTP? Если да, будет ли paramiko работать? Если вышеуказанное сработает, почему я получаю следующие ошибки при попытке установить PyCrypto?

 error: [WinError 2] The system canot find the file specified
**Failed building wheel for pycrypto**
  

Мой второй вопрос: если paramiko не будет работать с Python 3.6, есть ли какие-либо альтернативы или я должен вернуться к предыдущей версии python для передачи файлов SFTP?

Комментарии:

1. ошибка: [WinError 2] Система не может найти указанный файл, Не удалось создать колесо сборки для pycrypto

2. ваша проблема в том, что, находясь в Windows (WinError), вам приходится проходить через некоторые этапы, такие как установка vc, чтобы скомпилировать некоторые пакеты, подобные here (посмотрите на установку pycrypto в Windows). Вы могли бы попробовать использовать conda / anaconda, которые помогут установить большинство необходимых инструментов, или найти в Google пакет wheel, который уже есть для вашей среды Windows.

3. не удается установить напрямую, потому что прокси-сервер блокирует его

4. Это довольно необычное ограничение. Вы должны упомянуть об этом в своем вопросе! — Вы пробовали настраивать прокси в pip?

5. Да, я пытался использовать настроенный прокси. Но это не сработало.

Ответ №1:

Да, через python возможна передача файла с sftp. У Python хороший пакет

Шаг 1 :

 pip install pysftp
  

Шаг 2:

Пример того, как передать файл:

 import pysftp

with pysftp.Connection('hostname', username='me', password='secret') as sftp:
    with sftp.cd('public'):             # temporarily chdir to public
        sftp.put('/my/local/filename')  # upload file to public/ on remote
        sftp.get('remote_file')         # get a remote file