与python导入混淆(绝对和相对)

2024-10-05 10:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我为它创建了项目和助手模块。但是有些模块相互使用,比如worker 1使用helper1,helper2也使用helper1。因此,我完全搞不清楚我需要如何导入所有这些模块,以便能够独立工作(例如,我想从主脚本中调试helper2),它们仍然可以正常工作。总结-如何正确导入模块,使maint\u脚本将工作和其他模块时,使用out-of-main\u脚本。对不起我的英语

main program dir/
      main_script.py
      -classes/
          |
          |--helper1.py
          |--helper2.py
      -worker_classes/
          |
          |--worker1.py

目前,我正在每个脚本的请求中使用这种结构,但是我觉得这种方法不适合python

import os
import sys

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'shell_modules')))

Tags: 模块path项目pyimport脚本osmain
1条回答
网友
1楼 · 发布于 2024-10-05 10:35:10

我处理项目内部导入的方法是以可编辑模式安装项目。通过这种方式,所有文件将能够彼此定位,始终从项目根目录开始

为此,请执行以下步骤:

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)您的文件现在可以彼此定位,始终从项目根开始。例如,要导入helper1.py,可以编写:

from classes import helper1

或者:

from classes.helper1 import foo, bar

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

正如我所说的,您应该使用一个虚拟环境来实现这一点,这样pip就不会将您的包安装到主Python安装中(如果您的项目有许多依赖项,这可能会很混乱)

目前我最喜欢的工具是pipenv。使用时,将terminal命令替换为

$ pipenv install -e .

这样您的项目就可以添加到Pipfile中

相关问题 更多 >

    热门问题