Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入错误:没有名为<;的模块;某物>;_Python_Python Import - Fatal编程技术网

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 a
setup.py
用户将能够使用
python setup.py install安装包
研究编写正确的设置为什么我们不直接在代码中修改
sys.path
?直接从程序中修改python路径。这很混乱,通常是不必要的,而且扩展性不好。在每个导入语句中搜索
sys.path
中的每个条目。因此,如果安装的每个库都决定插入
sys.path
,而不是像往常一样只安装到site packages dir中,那么导入系统就会变得缓慢和笨拙。甚至连一位专家也警告说,这是错误的