pycharm终端运行python文件_Python可在PyCharm中运行,但不能从终端运行

我最近想出了如何导入模块以进行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

我有初始化文件应该放在的地方,但是我不知道为什么它在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?

init.py我应该包括

您从当前目录运行python吗

我已经尝试过使用完整路径并将当前目录更改为顶层文件夹以及Tests

"我没有更改路径或PyCharm中的任何内容"或sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ..)))这是什么?

这包括在脚本中。我没有对PyCharm本身进行任何更改。据我了解,即使我通过终端运行该行,它也会运行。

我觉得我应该可以使用charm命令打开任意文件,但是我不能。这让我很生气,我在这里找不到解决方案。因此,这里等待答案... PyCharm团队不应该回答吗?

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

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

希望这可以帮助..

您能详细说明一下吗? setup.py的作用是什么?"在本地虚拟python环境中安装类/结构"是什么意思?

在PyCharm中运行脚本时,它将在PYTHONPATH设置为项目浏览器中标记为" Sources Root"(带有蓝色文件夹图标)的所有文件夹的列表中的环境中运行该脚本。

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

一旦正确获得了工作目录,就应该能够删除sys.path hack。

但是话又说回来,并不是出于某些奇怪的原因。这在一个项目中对我有用,但在另一个项目中不起作用。因此,似乎还有其他工作。

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

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

嗨@ user3591079。我似乎有类似的问题,但似乎无法解决。当您说"我已将其添加到我的导入文件中并且似乎已经解决了问题"时,您是什么意思。我尝试在我的python脚本中执行此操作,但仍然无法正常工作。谢谢!

对我来说,这会导致类似ValueError: substring not found的错误。您可以提供任何指导吗?

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

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

sys.path.append('')

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

HTH。

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

哪个"源目录"? pip install .到底做什么?

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

cd到python文件所在的文件

运行export PYTHONPATH =。

运行脚本

您还可以在设置python路径的位置创建" main" python文件,然后调用其他模块

这不仅对我不起作用,而且在Windows 7的Git Bash上,echo $PYTHONPATH返回.-不是实际路径。

@alex:也许这会有所帮助:在脚本中导入后,输入以下命令:os.environ [" PYTHONPATH"] ="。并重新运行它。请让我知道它是否有效。

@alex有效吗? (在脚本中的导入之后,立即将os.environ [" PYTHONPATH"] ="。"放进去)

不。第一次导入存在问题,因此脚本在到达os.environ语句之前便被炸毁。如果我将那行代码放在导入上方-print os.environ["PYTHONPATH"]仍返回.。

你可能感兴趣的:(pycharm终端运行python文件_Python可在PyCharm中运行,但不能从终端运行)