Виртуальная среда Python 3.8 при Windows проблемах с подключением, когда Python установлен на диске, отличном от venv - PullRequest
0 голосов
/ 14 января 2020

У меня есть несколько вен, разбросанных по моей выданной работе машине на разных дисках, включая мой локальный диск C. Я использую Windows 7 Enterprise, если это имеет значение. Мой интерпретатор python также установлен на моем диске C.

Я знаю, что за корпоративным брандмауэром, потому что мне нужно использовать команду прокси-сервера для загрузки чего-либо с помощью pip, но я не Не думаю, что это проблема root здесь. (кроме, возможно, pip тоже не работает в venv)

Мой вопрос: почему это не работает, и что я могу сделать, чтобы эта работа работала не только на том же приводе, что и мой переводчик?

В трассировке я вижу, что используемые библиотеки находятся на диске C, вызывая depsite из venv на диске F, но я не уверен, важно ли это здесь.

Ближайшее обсуждение, которое мне удалось найти по этому вопросу, здесь: https://github.com/pypa/pip/issues/5568, но автор выбирает обходной путь, а не исправление. Я полагаю, потому что никакого исправления не известно.

Я тестировал один и тот же ftp-скрипт, используя ftplib 3 различными способами:

  1. В IDLE: работает как положено.
  2. В venv на моем C диске: работает как положено
  3. В 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))]
>>> 
...