Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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_Conda - Fatal编程技术网

Python 康达环境中的绝对进口

Python 康达环境中的绝对进口,python,conda,Python,Conda,在使用conda env时,我遇到了绝对导入问题。这是我的项目结构 计划/ 包_1/ __初始值 文件_1.py 子包装_1/ run.py 在package_1.subpackage_1.run.py中有一个绝对导入package_1.file_1。但是,当我在package文件夹中运行python package_1/subpackage_1/run.py时,出现了一个错误: ModuleNotFoundError:没有名为“package_1”的模块。我试图打印sys.path。proje

在使用conda env时,我遇到了绝对导入问题。这是我的项目结构

计划/ 包_1/ __初始值 文件_1.py 子包装_1/ run.py 在package_1.subpackage_1.run.py中有一个绝对导入package_1.file_1。但是,当我在package文件夹中运行python package_1/subpackage_1/run.py时,出现了一个错误:
ModuleNotFoundError:没有名为“package_1”的模块。我试图打印sys.path。project.package_1.subpackage_1位于sys.path中,但我从中运行命令的文件夹project不在其中。我试图在PATH或PYTHONPATH中添加项目,但在conda env中不起作用。有人知道如何解决这个问题吗?谢谢

执行此操作的方法之一是将目录添加到sys.path,并在run.py的顶部使用此代码

然后更改run.py中的行

import package_1.file_1

现在python可以直接导入file1,因为它的目录位于路径上。

Summary 您可以通过相对导入或绝对导入(如果您重组项目的话)来完成您想要的。修改sys.path或PYTHONPATH不应该是您的解决方案。如果您确实想要全球可用性,可以使用conda安装本地软件包

备选案文1:

如果你想在一个子模块中直接运行一个文件,即Python PACKAGE1/子PultAGE1/Run.Py,那么你应该考虑使用相对导入。 例如:

run.py 导入..文件\u 1 备选案文2:绝对进口 如果您想使用绝对导入,那么您的入口点—您运行的脚本—应该在顶级包_1中,而不是在子包中

例如:

run.py 导入包\ 1.子包\ 1.东西 跑吧 stuff.py 导入包_1.file_1 选项3:使用conda安装本地软件包 一旦你开始跑步,你就应该能够简单地跑步

conda install .
它将像安装已发布的包一样安装本地包。这对于你的需求来说可能是过度的

为什么不修改PYTHONPATH或sys.path? 如果您依赖于将本地包路径放在PYTHONPATH上,则每次移动项目或将其复制到新计算机上时,您都会看到它


在代码中向sys.path添加条目通常会达到与相对导入类似的效果,但以后的导入语句会失去语义。

此解决方案虽然功能强大,但不再像OP请求的那样是绝对导入。@Aposhian-OP问题的最后一行是我试图在path或PYTHONPATH中添加project,但它在康达环境中不起作用。有人知道如何解决这个问题吗此解决方案解决了此问题。我看不出OP在哪里指定解决方案需要是绝对import.Fair。然而,我可能错误地理解OP想要进行绝对导入,并认为将包添加到PYTHONPATH可以解决这个问题。绝对进口在美国是首选——在这种情况下。我认为否决票是不合理的。公平。然而,在编辑之前,我不能撤回我的投票,所以我已经提交了一份。
import file_1
project/
  package_1/
    __init__.py
    file_1.py
    subpackage_1/
      __init__.py
      run.py
project/
  package_1/
    __init__.py
    run.py
    file_1.py
    subpackage_1/
      __init__.py
      stuff.py
conda install .