我正在 PyCharm 中从事一个项目。该项目具有以下结构:
/projectRoot/
folder1/
somecode.py
utils/
__init__.py
myutils1.py
我想知道如何进行导入,以便在以交互方式在 pyCharm 控制台中运行代码时以及使用
python somecode.py
终端中的命令。
目前我这样做:
from utils.myutils1.py import myClass
但是命令行我得到错误:
文件“somecode.py”,第 10 行,来自 utils.myutils1 import myClass ModuleNotFoundError: No module named ‘utils’
在 PyCharm 上:
回溯(最近调用最后):文件“/home/ubuntu/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py”,第 2881 行,在 run_code exec(code_obj, self.user_global_ns, self .user_ns) 文件“”,第 1 行,在 from utils.myutils1 import myClass ModuleNotFoundError: No module named ‘utils’
关于项目中模块的正确文件夹结构以及如何正确导入它们的任何建议?
谢谢!
原文由 Dnaiel 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了解释答案,我重新创建了您拥有的项目结构
一些代码.py
myutils1.py
从 pycharm 运行它们没有任何问题,但是从终端运行它们会产生以下错误
问题是 Pycharm 为您做的事情很少,因为您没有意识到为什么它在终端中不起作用。因此,在告诉您需要做什么之前,我将告诉您 PyCharm 自己做的两件事。
Python控制台
当您从 Pycharm 启动 Python 控制台时,会使用首选项执行一些代码。
如您所见,有两个选项
然后还有一个起始脚本。所以它的作用是将项目的根目录添加到 python 的路径中。它由两种主要方式控制
sys.path
和PYTHONPATH
环境变量如果我在 Python 控制台中运行以下代码
如您所见
'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27'
被添加到Python终端。蟒蛇配置
当您使用 Pycharm 配置为在代码中运行时,您有两个类似的选项。
我们可以将
somecode.py
的代码更改为以下从输出中我们可以看到
PYTHONPATH
被设置为当前项目文件夹。从终端运行
现在让我们从终端运行
somecode.py
并进行我们所做的修改。所以这表明当我们在终端中运行它时没有
PYTHONPATH
。让我们通过删除print(os.environ['PYTHONPATH'])
代码再次运行它。您将获得以下输出如您所见,
folder1
添加到sys.path
因为它是包含somecode.py
的文件夹,但尚未添加根文件夹。 terminal 中的修复很简单,就是在 PYTHONPATH 中设置根目录路径。现在代码也可以从终端运行。
但它们的工作方式与 Python 控制台不同。
重要说明: 在远程解释器上使用 PyCharm 的 Python 控制台。
如果使用远程解释器选项运行 python 控制台,pycharm 将失败。这是因为它将附加本地 PC 的路径而不是远程服务器的路径。为了解决这个问题,必须在本地 PC 目录和远程服务器路径之间添加一个映射。
