我正在努力设置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
答案 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