使用conda env时遇到绝对导入问题。这是我的项目的结构。
在package_1.subpackage_1.run.py
中有一个绝对导入import package_1.file_1
。但是,当我在python package_1/subpackage_1/run.py
文件夹中运行package
时,出现错误:
ModuleNotFoundError: No module named 'package_1'
。我尝试打印sys.path
。 project.package_1.subpackage_1
在sys.path
中,但是我运行命令的文件夹project
在project
中。我试图在PATH
或PYTHONPATH
中添加{{1}},但在conda env中不起作用。有谁知道如何解决这一问题?谢谢!!!
答案 0 :(得分:1)
其中一种方法是将这段代码添加到run.py
import sys
import os
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'package_1'))
然后在run.py中更改行
import package_1.file_1
到
import file_1
答案 1 :(得分:0)
您可以通过相对导入或绝对导入(如果您重构项目)来完成所需的工作。修改sys.path
或PYTHONPATH
不应成为您的首选解决方案。如果您确实想要全局可用性,则可以使用conda
安装本地软件包。
如果您希望能够直接在子模块(即python package_1/subpackage_1/run.py
)中运行文件,则应考虑使用相对导入。
示例:
project/
package_1/
__init__.py
file_1.py
subpackage_1/
__init__.py
run.py
# run.py
import ..file_1
如果您要使用绝对导入,则您的入口点(运行的脚本)应位于顶层(package_1
)而不是子包中。
示例:
project/
package_1/
__init__.py
run.py
file_1.py
subpackage_1/
__init__.py
stuff.py
# run.py
import package_1.subpackage_1.stuff
stuff.run()
# stuff.py
import package_1.file_1
conda
安装本地软件包一旦configure your package correctly,您就应该能够简单运行
conda install .
这将像安装已发布的软件包一样安装您的本地软件包。这可能会满足您的需求。
PYTHONPATH
或sys.path
?如果您依赖于PYTHONPATH
上的本地程序包路径,则每次移动项目或将其复制到新计算机上时都需要这样做。
在代码中将条目追加到sys.path
上通常会实现与相对导入类似的效果,但是以后的import语句会失去语义。