您的包裹结构还可以。您的导入声明很好。唯一缺少的是该软件包在中是可见的sys.path
,该位置是可以解析import语句的位置列表。
通常,我们通过在本地“安装”软件包来执行此操作,该软件包会将pip
您的代码复制到站点软件包?中。该目录是中的条目之一sys.path
,因此,当您将代码安装在站点程序包中时,现在可以照常解析import语句。
但是,要安装代码,您需要为该软件包定义一个安装程序(setup.py
脚本)或构建系统(pyproject.toml
文件)。您的项目似乎没有任何安装程序或构建系统,因此您需要创建一个安装程序或构建系统(有关详细信息,请参阅《Python打包用户指南》),然后使用来安装软件包pip
。如果您现在还不想学习Python封装,则需要找到另一种方法。
可以sys.path
直接在中进行修改main.py
,这随后使语句import ankur.ankur1.util
得以解析。这很骇人,我建议不要这样做。它将增加限制,即执行main.py
是包其余部分的唯一入口点,因此任何其他想要的代码都import ankur
将首先需要知道main.py
文件系统上的路径。那是一个凌乱的方法,应该避免。
解决该问题的另一种方法是使用环境- 有一个环境变量PYTHONPATH
,可用于增加模块文件的默认搜索路径。在您的外壳中:
export PYTHONPATH=/path/to/parent
其中parent是包含ankur
子目录的目录。
? 网站软件包的确切位置取决于您的OS /平台,但是您可以通过import sysconfig; sysconfig.get_paths()["purelib"]