ImportError: No module named <something>
ImportError: No module named <something>
我知道这个问题已经被问过多次了。我已经通读了所有这些但无法解析我的 issue.The 以下是我的目录结构。
ankur
--ankur1
__init__.py
util.py
--ankur2
main.py
--__init__.py
在 main.py 中,我正在导入以下内容。
import ankur.ankur1.util
当我执行 windows 中的代码时,它工作得很好。但是在 Linux 中,我得到以下错误。
ImportError: No module named ankur.ankur1.util
我还阅读了关于模块和包的官方 python doc。
你的包结构没问题。您的导入语句没问题。唯一缺少的是包在 sys.path
中可见,这是一个可以解析导入语句的位置列表。
通常我们通过 pip
, which copies your code into site-packages† 在本地“安装”软件包来完成此操作。此目录是 sys.path
中的条目之一,因此当您的代码安装在站点包中时,现在可以照常解析导入语句。
但是,要安装代码,您需要为程序包定义安装程序(setup.py
脚本)或构建系统(pyproject.toml
文件)。您的项目似乎没有任何安装程序或构建系统,因此您需要创建一个(有关详细信息,请参阅 Python Packaging User Guide),然后使用 pip
安装程序包。如果您还不想学习 Python 打包,则需要另辟蹊径。
可以直接在 main.py
中修改 sys.path
,这随后可以解析语句 import ankur.ankur1.util
。这是 hacky,我建议不要这样做。它将添加限制,即执行 main.py
是包其余部分的唯一入口点,因此任何其他想要 import ankur
的代码首先需要知道 main.py
的路径文件系统。这是一种混乱的方法,应该避免。
另一种方法是使用环境 - 有一个环境变量 PYTHONPATH
可用于增加模块文件的默认搜索路径。在你的 shell:
export PYTHONPATH=/path/to/parent # linux/macOS
SET PYTHONPATH=C:/path/to/parent # Windows
父级是包含 ankur
子目录的目录。
† 站点包的确切位置取决于您的 OS/platform,但您可以通过 import sysconfig; sysconfig.get_paths()["purelib"]
[=49 查看=]
我知道这个问题已经被问过多次了。我已经通读了所有这些但无法解析我的 issue.The 以下是我的目录结构。
ankur
--ankur1
__init__.py
util.py
--ankur2
main.py
--__init__.py
在 main.py 中,我正在导入以下内容。
import ankur.ankur1.util
当我执行 windows 中的代码时,它工作得很好。但是在 Linux 中,我得到以下错误。
ImportError: No module named ankur.ankur1.util
我还阅读了关于模块和包的官方 python doc。
你的包结构没问题。您的导入语句没问题。唯一缺少的是包在 sys.path
中可见,这是一个可以解析导入语句的位置列表。
通常我们通过 pip
, which copies your code into site-packages† 在本地“安装”软件包来完成此操作。此目录是 sys.path
中的条目之一,因此当您的代码安装在站点包中时,现在可以照常解析导入语句。
但是,要安装代码,您需要为程序包定义安装程序(setup.py
脚本)或构建系统(pyproject.toml
文件)。您的项目似乎没有任何安装程序或构建系统,因此您需要创建一个(有关详细信息,请参阅 Python Packaging User Guide),然后使用 pip
安装程序包。如果您还不想学习 Python 打包,则需要另辟蹊径。
可以直接在 main.py
中修改 sys.path
,这随后可以解析语句 import ankur.ankur1.util
。这是 hacky,我建议不要这样做。它将添加限制,即执行 main.py
是包其余部分的唯一入口点,因此任何其他想要 import ankur
的代码首先需要知道 main.py
的路径文件系统。这是一种混乱的方法,应该避免。
另一种方法是使用环境 - 有一个环境变量 PYTHONPATH
可用于增加模块文件的默认搜索路径。在你的 shell:
export PYTHONPATH=/path/to/parent # linux/macOS
SET PYTHONPATH=C:/path/to/parent # Windows
父级是包含 ankur
子目录的目录。
† 站点包的确切位置取决于您的 OS/platform,但您可以通过 import sysconfig; sysconfig.get_paths()["purelib"]
[=49 查看=]