与python import混淆(绝对和相对)

时间:2019-06-04 10:51:36

标签: python import

我为此创建了项目和帮助程序模块。但是某些模块相互使用,例如工作程序1使用helper1,helper2也使用helper1。因此,我感到很困惑,我需要如何导入所有这些模块,以便可以独立工作(例如,我想从主脚本中调试helper2),它们仍然可以正常工作。总结-如何正确导入模块,以便在使用main_script之外的模块时maint_script和其他模块可以正常工作。对不起,我的英语。

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')))

1 个答案:

答案 0 :(得分:1)

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

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

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中。