Python 导入错误:没有名为<;的模块;某物>;
我知道这个问题已经被问过多次了。我已经通读了所有这些,但无法解决我的问题。以下是我的目录结构Python 导入错误:没有名为<;的模块;某物>;,python,python-import,Python,Python Import,我知道这个问题已经被问过多次了。我已经通读了所有这些,但无法解决我的问题。以下是我的目录结构 ankur --ankur1 __init__.py util.py --ankur2 main.py --__init__.py 在main.py中,我导入以下内容 import ankur.ankur1.util 当我在windows中执行代码时,它工作得非常好。但是在Linux中,我得到
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。您的包结构还可以。你的进口声明没问题。缺少的唯一一件事是包在一个可以解析导入语句的位置列表中可见 通常,我们通过在本地“安装”包来实现这一点,将代码复制到†。此目录是
sys.path
中的条目之一,因此当您的代码安装在站点包中时,导入语句现在可以像往常一样解析
但是,要安装代码,需要为包定义安装程序(setup.py
script)或生成系统(pyproject.toml
file)。您的项目似乎没有任何安装程序或生成系统,因此您需要创建一个安装程序或生成系统(有关详细信息,请参阅),然后使用pip
安装软件包。如果您还不想学习Python打包,那么需要找到另一种方法
可以直接在main.py
中修改sys.path
,从而使语句import ankur.ankur1.util
得以解析。这是骇客,我建议反对。它将增加一个限制,即执行main.py
是包其余部分的唯一入口点,因此任何想要import ankur
的其他代码首先需要知道文件系统上main.py
的路径。这是一个混乱的方法,应该避免
另一种方法是使用环境-有一个环境变量可用于增加模块文件的默认搜索路径。在您的shell中:
export PYTHONPATH=/path/to/parent # linux/macOS
SET PYTHONPATH=C:/path/to/parent # Windows
其中parent是包含ankur
子目录的目录
†站点软件包的确切位置取决于您的操作系统/平台,但您可以使用
import sysconfig;sysconfig.get_paths()[“purelib”]
您的包结构正常。你的进口声明没问题。缺少的唯一一件事是包在一个可以解析导入语句的位置列表中可见
通常,我们通过在本地“安装”包来实现这一点,将代码复制到†。此目录是sys.path
中的条目之一,因此当您的代码安装在站点包中时,导入语句现在可以像往常一样解析
但是,要安装代码,需要为包定义安装程序(setup.py
script)或生成系统(pyproject.toml
file)。您的项目似乎没有任何安装程序或生成系统,因此您需要创建一个安装程序或生成系统(有关详细信息,请参阅),然后使用pip
安装软件包。如果您还不想学习Python打包,那么需要找到另一种方法
可以直接在main.py
中修改sys.path
,从而使语句import ankur.ankur1.util
得以解析。这是骇客,我建议反对。它将增加一个限制,即执行main.py
是包其余部分的唯一入口点,因此任何想要import ankur
的其他代码首先需要知道文件系统上main.py
的路径。这是一个混乱的方法,应该避免
另一种方法是使用环境-有一个环境变量可用于增加模块文件的默认搜索路径。在您的shell中:
export PYTHONPATH=/path/to/parent # linux/macOS
SET PYTHONPATH=C:/path/to/parent # Windows
其中parent是包含ankur
子目录的目录
†站点软件包的确切位置取决于您的操作系统/平台,但您可以使用
import sysconfig;sysconfig.get_paths()[“purelib”]
是否已将包安装到环境中?感谢您的回复。我不明白。我们需要单独安装吗。在我的windows环境中,它工作得很好。我相信这可能是一个在windows而不是linux上正确配置的PYTHONPATH
问题,请将代码库添加到路径中,或者安装它,使其自动定位到路径中。非常感谢。这就是问题所在。但是我们如何配置它来自动安装它呢。我希望用户下载代码并运行它,而不是配置PYTHONPATH。创建setup.py
用户将能够使用python setup.py install
安装软件包。查看编写正确的设置。您是否已将软件包安装到环境中?感谢回复。我不明白。我们需要单独安装吗。在我的windows环境中,它工作得很好。我相信这可能是一个在windows而不是linux上正确配置的PYTHONPATH
问题,请将代码库添加到路径中,或者安装它,使其自动定位到路径中。非常感谢。这就是问题所在。但是我们如何配置它来自动安装它呢。我希望用户下载代码并运行它,而不是配置PYTHONPATH.create asetup.py
用户将能够使用python setup.py install安装包
研究编写正确的设置为什么我们不直接在代码中修改sys.path
?直接从程序中修改python路径。这很混乱,通常是不必要的,而且扩展性不好。在每个导入语句中搜索sys.path
中的每个条目。因此,如果安装的每个库都决定插入sys.path
,而不是像往常一样只安装到site packages dir中,那么导入系统就会变得缓慢和笨拙。甚至连一位专家也警告说,这是错误的