我最近想出了如何在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
sys.path.append(os.getcwd()[:os.getcwd().index('Dev')])
我将此添加到我的导入中,它似乎解决了这个问题。但是,这似乎不是正确的做法;它现在会做。
从PyCharm中运行脚本时,它在一个环境中运行它,其中PYTHONPATH
设置为项目资源管理器中标记为“Sources Root”(带有蓝色文件夹图标)的所有文件夹的列表。
在PyCharm之外,PYTHONPATH
通常不会被设置。 sys.path
中的第一个条目是指运行脚本的当前工作目录。只要您使用终端的工作目录运行脚本作为包含Dev
的文件夹,它就应该能够找到Dev.test
模块,无论添加到sys.path
的额外条目如何。
一旦你得到正确的工作目录,你应该能够删除sys.path
黑客。
我也遇到过这个问题 - 由PyCharm设置的PYTHONPATH设置似乎确实存在问题。
我的替代方法(因为我差不多完成代码编写)是生成一个setup.py - 并在我的本地虚拟python环境中安装类/结构。
希望这可以帮助..
我建议你在源目录中试用$ pip install .
。这将为您的项目安装自己的包。
@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。
为了在这里添加类似的答案,PyCharm在运行脚本之前为你做了一些额外的配置。如果将源根目录添加到PYTHONPATH不起作用,那么在PyCharm中检查你的运行配置中的相关脚本,可能会有更多的幕后魔法在玩。
我有类似的问题。我认为问题是Pycharm在运行脚本之前修改了PYTHONPATH:
您还可以创建“main”python文件,在其中设置python路径,然后调用其他模块