mypy:无法让MYPYPATH在Windows Powershell中工作

问题描述 投票:0回答:1

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

我在Windows 10上使用PowerShell。完整示例如下。谁能告诉我为MYPYPATH设定的确切价值?我已经尝试了我能想到的每个变体:相对路径,绝对路径,带有'/'''和'\\'的路径。我已经阅读了mypy文档。

这是我的文件:

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

u替LS.朋友:

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

u替LS_test.朋友:

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
windows mypy
1个回答
0
投票

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

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

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

PS C:\Users\Gareth\Mypy\tests> mypy --namespace-packages .\utils_test.py
© www.soinside.com 2019 - 2024. All rights reserved.