Python在PyCharm中工作,但不在终端上工作

问题描述 投票:14回答:7

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

python python-2.7 pycharm
7个回答
1
投票
sys.path.append(os.getcwd()[:os.getcwd().index('Dev')])

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


1
投票

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

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

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


1
投票

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

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

希望这可以帮助..


0
投票

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


0
投票

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

您可以根据搜索项目的顺序使用insert / append。

HTH。


0
投票

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


-1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.