python - 从 CLI 运行时出现 Python“ModuleNotFound”错误,但在“pip install -e”之后从 Pycharm 运行时不会出现错误。”(使用 Anaconda)
问题描述
tldr:我可以从 Pycharm 运行我的脚本,但不能从命令行运行。pip install -e .
该模块是通过(使用时我的模块显示在我的包中)安装在 Anaconda中的conda list
。sys.path
当我从 Pycharm 和命令行运行它时,可以找到模块目录,但是PYTHONPATH
当我从 Pycharm 而不是 CLI 运行它时,它包含我的模块路径。我试图避免走黑客路线并将我的脚本添加到PYTHONPATH
.
更长的版本
我有一个 python 项目,其目录结构如下:
project1/
mycode/
__init__.py
code/
__init__.py
simulation/
__init__.py
print_path.py
我试图从命令行运行python print_path.py
但它没有运行并引发关于 ModuleNotFound 错误的异常。奇怪的是,当我从 PyCharm 运行它时,我得到了预期的行为并且它运行了。我正在使用 Anaconda3 和 python3.7。我通过运行 pip 将我的代码安装为打包模块pip install -e .
路径print_path.py
:
C:\Users\axk\Documents\Work\project1\my_code\code\simulation
conda list
通过查看我在那里看到我的包的位置,我检查了我的包是否在我的环境包中。
这里是内容print_path.py
import os
import sys
try:
print("Attempting to print paths")
print()
user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
print(user_paths)
except KeyError as e:
print("there was an error: {}".format(e))
user_paths = []
try:
print()
print("SYS.PATH")
for path in sys.path:
print(path)
except KeyError as e:
print("there was an error: {}".format(e))
import code.simulation
print("made it past import")
print(code.simulation.__file__)
这将打印 sys.path 的内容以及内容PYTHONPATH
从 pycharm 运行时,以下是我的输出:
Attempting to print paths
['C:\\Users\\axk\\Documents\\Work\\project1\\my_code',
'C:\\Users\\axk\\Documents\\Work\\project1\\my_code\\code']
SYS.PATH
C:\Users\axk\Documents\Work\project1\my_code\code\simulation
C:\Users\axk\Documents\Work\project1\my_code
C:\Users\axk\Documents\Work\project1\my_code\code
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\python37.zip
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\DLLs
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code
C:\Users\axk\AppData\Roaming\Python\Python37\site-packages
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages\win32
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages\win32\lib
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages\Pythonwin
made it past import
C:\Users\axk\Documents\Work\project1\my_code\code\simulation\__init__.py
当我从命令行运行它时,python print_path.py
我得到
Attempting to print paths
there was an error: 'PYTHONPATH'
SYS.PATH
C:\Users\axk\Documents\Work\project1\my_code\code\simulation
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\python37.zip
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\DLLs
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code
C:\Users\axk\AppData\Roaming\Python\Python37\site-packages
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages
c:\users\axk\documents\work\project1\my_code
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages\win32
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages\win32\lib
C:\Users\axk\AppData\Local\Continuum\anaconda3\envs\my_code\lib\site-packages\Pythonwin
Traceback (most recent call last):
File "print_path.py", line 21, in <module>
import code.simulation
ModuleNotFoundError: No module named 'code.simulation'; 'code' is not a package
没有任何意义的是,当我导入我的文件时,它会在C:\Users\axk\Documents\Work\project1\my_code\code\simulation\__init__.py
. sys.path
当我从 Pycharm 和命令行运行它时,这条路径就存在。
我让它从命令行工作的唯一方法是将脚本添加到 PYTHONPATH 中。但是从 python 文档中,它应该找到它,因为它应该检查 sys.path 的包。那么为什么这不起作用呢?
编辑
好的,这里有些奇怪。如果我这样做from code import *
,代码将继续。不知道为什么会这样,因为每个模块都有一个__init__.py
文件
解决方案
推荐阅读
- javascript - 在 useEffect 依赖数组中使用 Redux 状态时如何避免无限循环?
- php - 关系访问器在 Laravel 中不起作用
- python - 为什么 fit_transform() 不适用于测试集?
- java - MIME 类型的验证
- java - 在 JMS 中设置 IBM MQ 定制属性不起作用
- r - 如何将向量添加到 R 中的向量列表中?
- flutter - 如何在颤振中从 code_field 包向 InputCodeField 添加处理程序?
- sql - Oracle:根据数据集替换选项字符串 - 这可能吗?
- powershell - 如何在以管理员身份运行powershell时使用本地文件访问权限
- android - 是否可以在 Robolectric 单元测试中运行 ML Kit?