python - Paramiko SSHClient 将无法连接使用 Pyinstaller 构建的可执行文件
问题描述
编辑
问题已解决,但前提是我从桌面运行生成的可执行文件,而不是我一直在开发和运行的服务器位置(VPN)。无需更改代码,但我希望有更健壮的东西。从网络位置运行时,这没有理由不起作用,特别是考虑到如果我在不创建可执行文件的情况下运行脚本,它就可以正常工作。似乎在那里运行它而不是在我的计算机桌面上运行它所带来的迟缓是导致事情表现不同的原因。我真的很想知道为什么会这样,以及是否有办法避免它。
版本:
- 视窗 10
- 蟒蛇:3.8.3
- PyInstaller:3.6
- 帕拉米科:2.7.1
以下是显示该问题的代码的最小版本:
import paramiko
ip = "10.0.0.172"
username = "username"
password = "password"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ip, username=username, password=password)
stdin, stdout, stderr = client.exec_command("ls")
print(stdout.readlines())
client.close()
我pipenv
用来在虚拟环境中包含这些包。
本地运行时(例如pipenv run python main.py
),没有问题。运行由 Pyinstaller 生成的可执行文件,使用pipenv run pyinstaller Test.spec --distpath "./Release"
,在运行生成的可执行文件时会导致以下运行时错误:
Traceback (most recent call last):
File "main.py", line 8, in <module>
File "lib\site-packages\paramiko\client.py", line 343, in connect
File "socket.py", line 231, in __init__
OSError: [WinError 10022] An invalid argument was supplied
我尝试过的事情:
hiddenimports
在 .spec 文件中添加“_socket”和“socket”- 安装不同版本的 Python、Pyinstaller、Paramiko
- 正在寻找其他有此问题的人。我发现的最接近的是This Github Issue,它提到了“PuTTY Pageant”(我没有也没有运行它或类似的东西)。这是一个 StackOverflow 帖子,有相同的错误,但来自试图自己创建的
socket
人,并且似乎是直接使用 Python 运行它,而不是通过使用 Pyinstaller 创建的可执行文件。这是另一篇文章,建议多次尝试创建一个套接字,我实现了它,但仍然遇到了问题。 - 重新启动我的计算机并在全新启动状态下运行可执行文件
这是我的 .spec 文件:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['main.py'],
binaries=[],
datas=[],
hiddenimports=["_socket"],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False
)
pyz = PYZ(
a.pure,
a.zipped_data,
cipher=block_cipher
)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='Test',
debug=True,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True
)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='Test'
)
感谢您的帮助。
解决方案
推荐阅读
- graphql - 在输入可以采用不同类型的地方制作 Graphql 输入
- intellij-idea - ScalaTestWithActorTestKit 未找到
- php - 我正在尝试向 url 添加一些不同的 GET 变量
- javascript - 如何从一个输入字段收集所有输入
- python - 如何在 Flask 蓝图中 mock.patch 一个函数?
- javascript - 从 React App 中删除未使用的 materialize-css 和 js 代码以提高效率
- python - 使用良好 XML 中缺少的特定元素更新 XML
- c# - asp net core项目中的targetframeworks冲突
- google-bigquery - 致命标志解析错误:未知的命令行标志“hive_partitioning_source_uri_prefix”
- mysql - 从 MySQL 数据库中提取约会并在 MonthlyCalendar 中显示其详细信息