编辑
此问题已解决,但仅当我从桌面运行生成的可执行文件,而不是从(VPN)开发和运行的服务器位置运行时。无需更改代码,但我希望拥有更强大的功能。从网络位置运行时,没有理由不应该这样做,尤其是考虑到如果我在不创建可执行文件的情况下运行脚本,则可以正常工作。好像在那儿运行而不是在我的计算机桌面上运行一样迟钝,这是在某种程度上导致事情表现有所不同。我真的很想知道为什么会这样,是否有办法避免这种情况。
版本:
下面是显示该问题的代码的最低版本:
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
)时,没有问题。使用pipenv run pyinstaller Test.spec --distpath "./Release"
运行Pyinstaller生成的可执行文件时,在运行生成的可执行文件时会导致以下运行时错误:
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
中添加“ _socket”和“ socket” socket
的人,并且似乎直接用Python运行它,而不是通过Pyinstaller创建的可执行文件运行。 Here是另一篇文章,建议多次尝试创建套接字,我已实现并仍然遇到问题。这是我的.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'
)
感谢您的帮助。