我有以下项目结构
speech_recognition.py(这是我的主模块atm)通过我的IDE(pyCharm)运行但是当我尝试使用python speech_recognition.py
通过终端运行它时,我得到
另一件事是我尝试以这种方式访问mic_config文件中system_config
文件夹中的Configurations
文件:
def __init__(self, path = "../Configurations/system_config"):
with open(path) as json_data:
self.mic_config = json.load(json_data)
json_data.close()
我得到以下异常:
那我该如何解决这些问题: 1.从其他包导入模块 2.使用相对路径访问文件
谢谢!
答案 0 :(得分:3)
def __init__(self, path = "../Configurations/system_config"):
with open(path) as json_data:
self.mic_config = json.load(json_data)
json_data.close()
当Python打开文件时,它会搜索当前目录中的路径。看起来你期望Python从目录中搜索,模块位于。
典型的解决方案是:
Configurations/system_config
然后你的代码看起来像:
def __init__(self, path = "Configurations/system_config"):
with open(path) as json_data:
self.mic_config = json.load(json_data)
json_data.close()
目前尚不清楚,您的项目在哪里有root权限。如果是Smart Home
,那么不清楚,为什么你在这个文件夹__init__.py
文件中,它不应该在那里。
如果您的项目主页位于Workspace
,那么您会遇到子模块Smart Home
中的空格问题。
setup.py
setup.py
是Python项目的典型部分,包含要使用的模块和包。当一个人开始使用Python进行编程时,它通常似乎是不重要的,太复杂的,并且是第一个跳过的候选者。
实际上,setup.py
是一种项目元信息,是许多工具(安装程序,IDE,...)的入口点。它允许定义应安装的其他软件包,您的软件包和模块位于何处,提供简短描述。
照顾它,它可能成为你项目的锚点。
这与两件事有关
setup.py
上面讨论过两者。
典型情况是:
Smart Home
__init__.py
setup.py
添加到项目根目录如果您cd
到项目根目录,您将能够(即使没有setup.py
):
python
(或更好iPython
)控制台import Parsers
import Parsers.listener_config
import SpeechRecognition
#mind成功,没有空间,重命名你的目录import SpeechRecognition.speech_recongintion
如果你失败了,你就会有错误的名字,名字中的空格,或者无法加载的代码破碎。
setup.py
在过去的两年里,这个领域取得了很大的进步,所以你很容易因为过时的信息而感到困惑。
简单规则:首选使用pip
作为命令行工具,使用setuptools
作为库来构建软件包。
两者都安装了另一个很棒的工具virtualenv
。
setuptools
and distribute
got merged大约一年前 - 这是简化混乱的非常重要的一步。所以最好的起点可能是setuptools
doc。