mypy: не удается заставить MYPYPATH работать в Windows Powershell - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь установить MYPYPATH так, чтобы mypy разрешал модули, которые не находятся в той же директории, что и моя основная программа.(Хорошо, если они находятся в одном каталоге).

Я работаю в PowerShell на Windows 10. Полный пример ниже.Кто-нибудь может сказать мне точное значение, которое я должен установить для MYPYPATH?Я пробовал каждый вариант, который я могу придумать: относительный путь, абсолютный путь, пути с '/' '\' и '\\'.Я прочитал документы mypy.

Вот мои файлы:

C:\USERS\GARETH\MYPY
├───modules
│       utils.py
│
└───tests
        utils_test.py

utils.py:

def ff(x: str) -> str:
    return "Hello " + x

utils_test.py:

from modules.utils import ff

print(ff("world")) # OK
ff(42) # error

Вот мой сеанс PowerShell.Python находит модуль и выдает ошибку времени выполнения (как и ожидалось):

PS C:\Users\Gareth\Mypy\tests> $env:PYTHONPATH
..
PS C:\Users\Gareth\Mypy\tests> python .\utils_test.py
Hello world
Traceback (most recent call last):
  File ".\utils_test.py", line 8, in <module>
    ff(42) # error
  File "C:\Users\Gareth\Mypy\modules\utils.py", line 3, in ff
    return "Hello " + x
TypeError: can only concatenate str (not "int") to str

Независимо от значения MYPYPATH, mypy не может найти модуль:

PS C:\Users\Gareth\Mypy\tests> $env:MYPYPATH
..
PS C:\Users\Gareth\Mypy\tests> mypy .\utils_test.py
utils_test.py:1: error: Cannot find module named 'modules.utils'
utils_test.py:1: note: See 
https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports

Может кто-нибудь сказать, пожалуйстамне точное значение, которое я должен установить для MYPYPATH?Это последний Mypy:

PS C:\Users\Gareth\Mypy\tests> mypy --version
mypy 0.660

1 Ответ

0 голосов
/ 15 февраля 2019

Я отвечаю на свой вопрос на основе комментария, предоставленного Michael0x2a.

В моем примере переменная окружения $ env: MYPYPATH = ".." отлично работает для импорта из modules.utils.

Проблема в том, что MyPy более требователен, чем сам Python, к распознаванию файлов .py в качестве модулей.Вы должны либо поместить файл с именем __init__.py (который может быть пустым файлом) в каталог модулей, либо запустить mypy с флагом --namespace-packages:

PS C:\Users\Gareth\Mypy\tests> mypy --namespace-packages .\utils_test.py
...