【问题标题】:Python works in PyCharm but not from terminalPython 在 PyCharm 中工作,但不能在终端中工作
【发布时间】:2015-09-29 16:07:14
【问题描述】:

我最近想出了如何在 python 中导入模块以进行单元测试。作为解决方案,我使用:

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from Dev.test import someclass

这在 PyCharm 中运行时运行良好,我得到了预期的输出。但是,当我从终端运行时,我遇到了错误:

ImportError: No module named Dev.test

我有 init 文件它们应该在的位置,但我不知道为什么它在 PyCharm 中工作但不是从终端。我没有更改我的路径或 PyCharm 中的任何内容,因为此代码应该能够在其他机器上以最少的修改运行。关于为什么会发生这种情况以及我可以做些什么来解决它的任何想法?

我的文件夹结构如下

-Current
-Dev
 -__init__.py
 -test
  - __init__.py
  -someclass.py
  -Tests
   -__init__.py
   -someunittest.py

我曾尝试从主文件夹以及完整路径运行 someunittest,但它仅适用于 PyCharm

【问题讨论】:

  • 是的,但是在终端中查看后它使用的是 2.7,与 PyCharm 中的相同
  • 你的文件夹结构是什么?您使用哪些命令在 Python 和 Pycharm 中进行测试,以及来自哪个目录?
  • 我添加了我的文件夹结构以进行澄清。我确定 PyCharm 使用的是正确的版本,但也许这是我的路径,尽管我没有更改默认值。
  • __init__ 还是__init__.py
  • “我没有改变我的路径或 PyCharm 中的任何东西”或sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 它是什么?

标签: python python-2.7 pycharm


【解决方案1】:
sys.path.append(os.getcwd()[:os.getcwd().index('Dev')])

我将此添加到我的导入中,它似乎已经解决了这个问题。但是,这似乎不是正确的方法。现在可以了。

【讨论】:

  • 嗨@user3591079。我似乎遇到了类似的问题,但似乎无法解决。当您说“我将其添加到我的导入中并且它似乎已经解决了问题”时,您是什么意思。我尝试在我的 python 脚本中执行此操作,但它仍然无法正常工作。谢谢!
  • 对我来说,这会导致类似ValueError: substring not found 的错误。你能提供任何指导吗?
【解决方案2】:

从 PyCharm 中运行脚本时,它会在将 PYTHONPATH 设置为项目资源管理器中标记为“Sources Root”(带有蓝色文件夹图标)的所有文件夹列表的环境中运行它。

在 PyCharm 之外,PYTHONPATH 通常不会被设置。 sys.path 中的第一个条目是指运行脚本的当前工作目录。只要您使用终端的工作目录作为包含Dev 的文件夹来运行脚本,它应该能够找到Dev.test 模块,无论添加到sys.path 的额外条目如何。

一旦你得到正确的工作目录,你应该能够删除sys.path hack。

【讨论】:

  • 但由于某种奇怪的原因,它又没有。这在一个项目中对我有用,但在另一个项目中却没有。所以似乎还有其他东西在起作用。
【解决方案3】:

@codewarrior 关于 PyCharm 设置自己的 PYTHONPATH 的说法是正确的。但是sys.path 没有我当前的工作目录。所以为了解决这个问题,我更新了我的PYTHONPATH(或者你可以编辑sys.path)。

设置PYTHONPATH

export PYTHONPATH=$PYTHONPATH:`pwd`  (OR your project root directory)

更新sys.path

import sys
sys.path.insert(0,'<project directory>') OR
sys.path.append('<project directory>')

您可以根据您希望搜索项目的顺序使用插入/追加。

HTH。

【讨论】:

    【解决方案4】:

    Pycharm 使用虚拟环境。当您尝试在终端中运行程序时,此环境未激活。
    您需要使用您的库构建或上传您的环境 Pycharm。 cd 到目录项目并在终端中写入

    source venv/bin/activate
    

    【讨论】:

      【解决方案5】:

      我也遇到过这个问题 - PyCharm 设置的 PYTHONPATH 设置似乎确实是个问题。

      我的替代方案(因为我几乎完成了编写代码)是生成一个setup.py - 并在我的本地虚拟 Python 环境中安装类/结构。

      【讨论】:

      • 你能详细说明一下吗? setup.py 到底是做什么的? “在我的本地虚拟 python 环境中安装类/结构”是什么意思?
      【解决方案6】:

      我建议在您的源目录中尝试$ pip install .。这将为您的项目安装您自己的包。

      【讨论】:

      • 哪个“源目录”? pip install . 到底是做什么的?
      【解决方案7】:

      为了在此处添加类似的答案,PyCharm 会在运行脚本之前为您做一些额外的配置。如果将您的源根目录添加到 PYTHONPATH 不起作用,然后检查您在 PyCharm 中的运行配置是否有问题的脚本,可能会有更多幕后魔术在起作用。

      【讨论】:

        【解决方案8】:

        我有类似的问题。我认为问题在于 Pycharm 在运行脚本之前会修改 PYTHONPATH:

        1. cd 到 python 文件所在的文件
        2. 运行 export PYTHONPATH=。
        3. 运行脚本

        您还可以创建“主”python 文件,在其中设置 python 路径,然后调用其他模块

        【讨论】:

        • 这不仅对我不起作用,而且在 Windows 7 的 Git Bash 上,echo $PYTHONPATH 返回 . - 不是实际路径。
        • @alex:也许这会有所帮助:在您的脚本中导入后,输入以下命令:os.environ["PYTHONPATH"] = "."并重新运行它。请让我知道它是否有效。
        • @alex 有用吗? (将 os.environ["PYTHONPATH"] = "." 放在脚本中的导入之后)
        • 不。第一次导入存在问题,因此脚本在到达os.environ 语句之前就被炸毁了。如果我将那行代码放在 above 导入 - print os.environ["PYTHONPATH"] 仍然返回 .
        猜你喜欢
        • 1970-01-01
        • 2020-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 2017-08-23
        • 2016-09-11
        相关资源
        最近更新 更多