繁体   English   中英

Python 可以在 PyCharm 中运行,但不能在终端中运行

[英]Python works in PyCharm but not from terminal

我最近想出了如何在 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

sys.path.append(os.getcwd()[:os.getcwd().index('Dev')])

我将此添加到我的导入中,它似乎解决了问题。 然而,这似乎不是正确的做法。 现在就可以了。

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

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

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

我也有这个问题 - PyCharm 设置的 PYTHONPATH 设置似乎确实是问题所在。

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

希望这可以帮助..

@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>')

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

哈。

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

source venv/bin/activate

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM