У меня есть несколько вен, разбросанных по моей выданной работе машине на разных дисках, включая мой локальный диск C. Я использую Windows 7 Enterprise, если это имеет значение. Мой интерпретатор python также установлен на моем диске C.
Я знаю, что за корпоративным брандмауэром, потому что мне нужно использовать команду прокси-сервера для загрузки чего-либо с помощью pip, но я не Не думаю, что это проблема root здесь. (кроме, возможно, pip тоже не работает в venv)
Мой вопрос: почему это не работает, и что я могу сделать, чтобы эта работа работала не только на том же приводе, что и мой переводчик?
В трассировке я вижу, что используемые библиотеки находятся на диске C, вызывая depsite из venv на диске F, но я не уверен, важно ли это здесь.
Ближайшее обсуждение, которое мне удалось найти по этому вопросу, здесь: https://github.com/pypa/pip/issues/5568, но автор выбирает обходной путь, а не исправление. Я полагаю, потому что никакого исправления не известно.
Я тестировал один и тот же ftp-скрипт, используя ftplib 3 различными способами:
- В IDLE: работает как положено.
- В venv на моем C диске: работает как положено
- В venv на сетевом диске: не работает
Фрагмент кода, который не работает внутри сетевого диска venv:
ftp = ftplib.FTP('<internal server domain name>')
И ошибка:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\users\xxxxx\appdata\local\programs\python\python38-32\Lib\ftplib.p
y", line 117, in __init__
self.connect(host)
File "c:\users\xxxxx\appdata\local\programs\python\python38-32\Lib\ftplib.p
y", line 152, in connect
self.sock = socket.create_connection((self.host, self.port), self.timeout,
File "c:\users\xxxxx\appdata\local\programs\python\python38-32\Lib\socket.p
y", line 787, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "c:\users\xxxxx\appdata\local\programs\python\python38-32\Lib\socket.p
y", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11003] getaddrinfo failed
Вот ошибки, которые я вижу, когда пытаюсь использовать сокеты или ftplib при запуске python в cmd.exe внутри сетевой диск venv:
(venv) F:\Work\Python Virtual Env Projects\venv>python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket; print(socket.getaddrinfo('stackoverflow.com', 443))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\users\xxxxx\appdata\local\programs\python\python38-32\Lib\socket.p
y", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11003] getaddrinfo failed
Тот же код, но в режиме IDLE:
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import socket; print(socket.getaddrinfo('stackoverflow.com', 443))
[(<AddressFamily.AF_INET: 2>, 0, 0, '', ('151.101.1.69', 443)), (<AddressFamily.AF_INET: 2>, 0, 0, '', ('151.101.129.69', 443)), (<AddressFamily.AF_INET: 2>, 0, 0, '', ('151.101.65.69', 443)), (<AddressFamily.AF_INET: 2>, 0, 0, '', ('151.101.193.69', 443))]
>>>