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