mypy:无法使MYPYPATH在Windows Powershell中运行

时间:2019-02-06 14:38:46

标签: windows mypy

我正在努力设置MYPYPATH,以便mypy可以解析与主程序不在同一目录中的模块。 (如果它们位于同一目录中就可以了。)

我正在Windows 10上的PowerShell中工作。下面是完整示例。谁能告诉我应该为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 :(得分:0)

我正在根据Michael0x2a提供的评论回答自己的问题。

在我的示例中,环境变量$ env:MYPYPATH =“ ..”可以很好地从modules.utils导入。

问题在于MyPy在将.py文件识别为模块方面比python本身更挑剔。您必须在模块目录中放置一个名为__init__.py的文件(可以是一个空文件),或者使用--namespace-packages标志运行mypy:

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