pip install .无法导入inclider模块,但python setup.py install可正常运行的原因
问题原因解析
1. python setup.py install 正常的原因
直接运行python setup.py install时,脚本的执行目录就是你的项目根目录(包含inclider.py的目录)。Python会自动把脚本所在目录加入sys.path的最前端,所以import inclider能直接找到同目录下的inclider.py模块,自然不会报错。
2. pip install . 报错的核心原因
pip的安装流程和直接运行setup.py完全不同,它会先做构建隔离:
- pip会创建一个临时工作目录,只把项目中符合Python打包规则的文件复制进去。默认情况下,它只会复制
setup.py、pyproject.toml,以及find_packages指定的justatest目录,而根目录下的inclider.py不属于要打包的包内容,不会被复制到临时目录。 - 之后pip在这个临时目录中执行
setup.py,此时临时目录里根本没有inclider.py,所以会抛出ModuleNotFoundError。
3. subprocess.run 正常的原因
用subprocess.run执行时,本质是启动了一个全新的Python进程,这个进程的工作目录还是你的项目根目录,和直接在终端运行python inclider.py的环境完全一致,sys.path包含根目录,所以能正常找到inclider.py模块。
内容的提问来源于stack exchange,提问作者mo adib
相关产品推荐
相关产品推荐

