gpt4 book ai didi

python - 如何从父子目录导入模块

转载 作者:太空狗 更新时间:2023-10-30 02:51:11 25 4
gpt4 key购买 nike

我想从父目录中的目录中的 python 文件导入 class。这是我当前的文件夹结构:

│   run_simulation_from_parent.py
│ __init__.py

├───.vscode
│ launch.json
│ settings.json

├───mod
│ │ mods.py
│ │ __init__.py
│ │
│ └───__pycache__
│ __init__.cpython-37.pyc

├───sim
│ │ run_simulation.py
│ │ __init__.py
│ │
│ └───__pycache__
│ __init__.cpython-37.pyc

└───__pycache__
__init__.cpython-37.pyc

文件 mod/mods.py 包含以下类:

class Objective:
"""Objective function class"""

def __init__(self, x):
self.x = x

文件 sim/run_simulation.py 包含:

from mod.mods import Objective

x = 5
obj = Objective(x)

当我尝试运行它时,出现以下错误:

  File "sim/run_simulation.py", line 1, in <module>
from mod.mods import Objective
ModuleNotFoundError: No module named 'mod'

在 visual studio 代码中,当我开始输入 mod.modsimport Objective 时它会自动填充

当我使用以下内容运行 run_simulation_from_parent.py 时,我没有遇到任何问题:

from mod.mods import Objective

x = 5
obj = Objective(x)

print(obj.x)

如何从目录 sim 执行此操作?我已经尝试过以下方法:

  1. 使用from ..mod.mods import Objective to run_simulation.py
  2. 使用包含以下内容的init.py 文件:import os, sys sys.path.append(os.path.dirname(os.path.realpath(__file__) ))

  3. 没有__init__.py 文件

编辑:我从父目录开始的 visual studio code 运行文件。我还从我使用的 sim 文件夹中的 Windows 命令行尝试了

python run_simulation.py

最佳答案

我在项目中处理导入的方式是以可编辑模式安装项目。这样,所有文件都能够相互定位,始终从您的项目根目录开始。

为此,请按照下列步骤操作:

1) 编写一个 setup.py 文件并将其添加到您的项目根文件夹 - 它根本不需要太多信息:

# setup.py
from setuptools import setup, find_packages

setup(name='MyPackageName', version='1.0.0', packages=find_packages())

2) 以可编辑模式安装您的包(最好是从虚拟环境)。从项目文件夹中的终端,写入

$ pip install -e .

注意点 - 这意味着“以可编辑模式从当前目录安装包”。

3) 项目中的文件现在可以相互定位,始终从项目根目录开始。例如,要导入 Objective,您可以编写:

from mod.mods import Objective

对于任何文件导入 Objective 都是如此,无论它位于项目结构中的什么位置

就像我说的,你应该为此使用一个虚拟环境,这样 pip 就不会将你的包安装到你的主要 Python 安装中(如果你的项目有很多依赖项,这可能会很困惑)。

我最喜欢的工具是 pipenv .使用时将终端命令替换为

$ pipenv install -e .

这样您的项目就会被添加到 Pipfile 中。

关于python - 如何从父子目录导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56806620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com