2017-02-22 60 views
1

Недавно я пытался запустить кусок кода с paramiko, код просто создает базовый порт ssh, а код доступен на других машинах. Однако, когда я устанавливаю paramiko и запускаю код на своей машине, он не работает. Я дважды проверил код, чтобы убедиться, что он тот же. Затем я проверил ошибки при компиляции, он говорит:Ошибка установки пакета paramiko 1.4.1 на mac

import paramiko 
    File "/Library/Python/2.7/site-packages/paramiko/__init__.py", line 30, in <module> 
    from paramiko.transport import SecurityOptions, Transport 
    File "/Library/Python/2.7/site-packages/paramiko/transport.py", line 33, in <module> 
    from cryptography.hazmat.backends import default_backend 
    File "/Library/Python/2.7/site-packages/cryptography/hazmat/backends/__init__.py", line 7, in <module> 
    import pkg_resources 
    File "/Library/Python/2.7/site-packages/pkg_resources/__init__.py", line 72, in <module> 
    import packaging.requirements 
    File "/Library/Python/2.7/site-packages/packaging/requirements.py", line 59, in <module> 
    MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") 
    TypeError: __call__() takes exactly 2 arguments (1 given) 

Я добившиеся онлайн ответы и сказал, что возможно проблема, я, возможно, является то, что у меня нет крипто 1.4.1 пакет. Поэтому я использую pip для установки пакета, и по какой-то причине я получил ту же ошибку, что и при запуске программы.

pip install crypto 
Collecting crypto 
    Using cached crypto-1.4.1-py2.py3-none-any.whl 
Collecting shellescape (from crypto) 
    Using cached shellescape-3.4.1-py2.py3-none-any.whl 
Collecting Naked (from crypto) 
    Using cached Naked-0.1.31-py2.py3-none-any.whl 
Collecting requests (from Naked->crypto) 
    Using cached requests-2.13.0-py2.py3-none-any.whl 
Collecting pyyaml (from Naked->crypto) 
    Using cached PyYAML-3.12.tar.gz 
Exception: 
Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 215, in main 
    status = self.run(options, args) 
    File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 335, in run 
    wb.build(autobuilding=True) 
    File "/Library/Python/2.7/site-packages/pip/wheel.py", line 749, in build 
    self.requirement_set.prepare_files(self.finder) 
    File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 380, in prepare_files 
    ignore_dependencies=self.ignore_dependencies)) 
    File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 634, in _prepare_file 
    abstract_dist.prep_for_dist() 
    File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 129, in prep_for_dist 
    self.req_to_install.run_egg_info() 
    File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 412, in run_egg_info 
    self.setup_py, self.name, 
    File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 387, in setup_py 
    import setuptools # noqa 
    File "/Library/Python/2.7/site-packages/setuptools/__init__.py", line 12, in <module> 
    import setuptools.version 
    File "/Library/Python/2.7/site-packages/setuptools/version.py", line 1, in <module> 
    import pkg_resources 
    File "/Library/Python/2.7/site-packages/pkg_resources/__init__.py", line 72, in <module> 
    import packaging.requirements 
    File "/Library/Python/2.7/site-packages/packaging/requirements.py", line 59, in <module> 
    MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") 
TypeError: __call__() takes exactly 2 arguments (1 given) 

Значит, кто-нибудь знает, что происходит с моей машиной? Есть ли какие-либо другие пакеты, которые мне нужно установить, прежде чем устанавливать криптографию?

В настоящее время я использую Mac OS Y Yosemite, и мой пипс обновлен.

************************* Обновление ******************** *********

Это исходный код:

import threading 
import paramiko 
import subprocess 

def ssh_command(ip,user,passwd,command): 
    client = paramiko.SSHClient() 
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    client.connect(ip,username = user, password = passwd) 
    ssh_session = client.get_transport().open_session() 
    if ssh_session.active: 
     ssh_session.exec_command(command) 
     print ssh_session.recv(1024) 
    return 

ssh_command('192.168.100.301','GLZ','TripleBody','id') 

Надеюсь, это поможет!

Также о проблеме с версией, я просто попытался использовать pip для установки pycrypto (который является версией 2.6.1), и та же ошибка повышается.

Спасибо за вашу большую помощь и терпение заранее, Питер

+0

Вы пробовали установить последнюю версию криптографии? это 2.6.1 – haifzhan

+0

Вы также можете указать код? – progNewbie

+0

Я только что отредактировал проблему, и, надеюсь, это поможет ~ – PetaGlz

ответ

0

Эй, я получил ту же проблему. Я попробовал следующую инструкцию, и она работает! (Предоставлено ptmcg от https://bugs.centos.org/view.php?id=12722&history=1)

Эта линия в requirements.py модуля упаковки:

MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") 

использует функцию, которая была введена в Pyparsing 2.0.2, а именно использование " expr() ", чтобы скопировать выражение, в данном случае" MARKER_EXPR() ". Обновление до Pyparsing 2.1.10 (последняя версия) рекомендуется курс действий, но это также может быть исправлена ​​путем изменения кода в requirements.py на:

MARKER_EXPR = originalTextFor(MARKER_EXPR)("marker") 

(В этой линии, это на самом деле не нужно сделать копию MARKER_EXPR.)

+0

Здравствуйте, PetaGlz .. если мой ответ поможет вам, не возражаете ли вы дать мне преимущество? Благодаря! – mopkaloppt

+0

Извините, сэр, я не очень знаком с переполнением стека, и я не часто проверял свою учетную запись. Когда я пытался дать вам верх, это говорит, что я не могу, жаль снова за это. – PetaGlz