我正在努力设置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
我根据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