VS Code Python Автозаполнение без синтаксического анализа условного импорта (__init__.py) - PullRequest
1 голос
/ 15 октября 2019

Я пытался и не смог получить автозаполнение для правильной обработки условного импорта (то есть: импортирует ОС и использует проверку / elif / else для импорта библиотеки, зависящей от ОС) при импорте библиотеки (я полагаю, что механизм, который обрабатывает ее, это IntelliSenseно не совсем уверен).

Впервые я столкнулся с проблемой при импорте серийного номера и могу вызвать правильный модуль вручную, но без использования условного выражения. Хотя эта проблема была повторена в других библиотеках, которые содержат условный импорт.

Я использую установленный Python 3.7 от Anaconda и расширение Microsoft Python в VS Code. Мои системные пути указывают на папку и библиотеки Anaconda, и при импорте не возникает проблем с поиском запрошенных файлов.

Результаты, которые я получаю для автоматического завершения, зависят от того, включен ли у меня Jedi в качестве механизма IntelliSense или MicrosoftPython Analysis Engine.

#Microsoft Python Analysis Engine
import serial
serial.Serial()
    #Dose reference module but incorrect one: serialjava.py for the Serial() function

#Setting > Python > Jedi Enabled (as IntelliSense engine)
import serial
serial.Serial() #not found
serial.serialwin32.Serial() #dose find function if use path to os dependent module

Если я напишу код в Spyder или Jupiter, пути импорта будут правильно проанализированы. Я проверил, чтобы убедиться, что это был не только мой компьютер, и у меня возникла та же проблема на компьютерах Лаборатории.

Библиотека __init__.py последовательной библиотеки (только раздел условной проверки):

if sys.platform == 'cli':
    from serial.serialcli import Serial
else:
    import os
    # chose an implementation, depending on os
    if os.name == 'nt':  # sys.platform == 'win32':
        from serial.serialwin32 import Serial
    elif os.name == 'posix':
        from serial.serialposix import Serial, PosixPollSerial, VTIMESerial  # noqa
    elif os.name == 'java':
        from serial.serialjava import Serial
    else:
        raise ImportError("Sorry: no implementation for your platform ('{}') available".format(os.name))

Среда: VS Code с расширением Microsoft Python
ОС: Windows 10 и macOS 10
Серверная часть: Python 3.7 от Anaconda установить
Импортированная библиотека: pyserial

...