在控制台VS pycharm中调用python脚本时找不到自定义模块

2024-06-03 05:19:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在终端中调用了一个python3脚本;我没有使用Python前缀来运行它,因为我在脚本中添加了#!/usr/local/bin/python3(我在OSX上从brew获得了python3)。你知道吗

有趣的是,如果我在terminal中运行脚本,我会得到一个导入错误,因为我的一个自定义模块没有找到。如果我在pycharm中运行相同的脚本,它可以正常工作。你知道吗

我假设Python启动并以相同的方式读取我用于模块的所有不同路径,包括pycharm和terminal,但情况似乎并非如此。如何设置脚本以独立于模块的路径找到模块?你知道吗

我可能也会在其他机器上运行相同的脚本,所以我想做好准备,从一开始就做正确的事情。你知道吗

编辑 我正在OSX上运行pycharm;Python3是通过Brew安装的,但符号链接位于/usr/local/bin中。 我的脚本是从主目录中的文件夹运行的,所以 /Users/tester/git/python_test_app/main/base/app_main.py

自定义模块位于主py脚本的同一文件夹中,但在上面一级:/Users/tester/git/python_test_app/main/pyutils.py

来自app_main.py的import语句是 import main.pyutils as utilities

这是我在运行脚本时得到的堆栈跟踪:

Traceback (most recent call last):
  File "main/base/app_main.py", line 13, in <module>
    import main.pyutils as utilities
ModuleNotFoundError: No module named 'main'

编辑2和解决方案

多亏了这些答案,我才明白这个问题与Pycharm如何处理项目有关。基本上,它以某种方式保存了项目所在的路径;因此调用import将导致项目文件夹被解析,这就是为什么它在Pycharm中工作良好的原因。你知道吗

在Python中,除非PYTHONPATH具有指向我的项目或我编写的其他模块的路径,否则它将无法找到这些模块,因此会引发错误。你知道吗

修正:

在我用来运行应用程序的主模块中,我确实检索了文件的路径;我知道它比我需要的模块低一级;因此我可以显式地将文件夹添加到当前的sys.path。这将使我能够成功调用导入。你知道吗

import sys

current_dir = os.path.dirname(__file__)
sys.path.insert(0, , current_dir)

唯一的缺点是,我在项目中使用的每个文件和资源都必须通过完整路径直接引用;因此我必须在项目中的各个文件周围传递current_dir。你知道吗


Tags: 模块文件path项目pyimport路径脚本
2条回答

在PyCharm上,按绿色“RUN”箭头旁边的框,然后按编辑配置(见图)

enter image description here

在那里您将有Working Directory-该路径是PyCharm运行脚本的地方(没有错误)。你知道吗

尝试从该路径内的终端运行它-这将解决您的导入错误。你知道吗

PyCharm具有项目解释器设置。验证这些与系统Python相同。转到:

  1. 文件菜单
  2. 设置
  3. 项目:<project name>
  4. 项目口译员
  5. 在PyCharm中查看项目正在使用的Python可执行文件/二进制文件的路径,并验证它是否与您的系统所调用的匹配(例如which python3

或者,可能是您在PyCharm中声明了源根目录,而系统无法正确运行模块,因为它存在于您运行它的路径中(尤其是在包中)。您可以使用-m参数并从Python调用它来解决这个问题。你知道吗

您还可以尝试从PyCharm内部的终端运行它,并在初始化shell会话之前查看它添加到路径中的内容(有时您也可以在运行配置中看到这一点)。如果您所指的模块不是通过pip/安装到Python路径中,而是加载到项目路径中,那么这可能是罪魁祸首。你知道吗

相关问题 更多 >