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

标签 python import

我为其创建了项目和辅助模块。但有些模块互相使用,比如worker 1 使用helper1,helper2 也使用helper1。所以我完全困惑我需要如何导入所有这些模块,以便可以独立工作(例如我想从主脚本中调试 helper2)并且它们仍然可以正常工作。总结 - 如何正确导入模块,以便 maint_script 在使用 main_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)编写一个 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 。使用时将终端命令替换为

$ pipenv install -e .

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

关于python - 与 python import (绝对和相对)混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56442405/

相关文章:

css - React - 按顺序导入 css/sass

python - 从哪里开始编写用于将本地目录同步到 Google Drive 的 Python 脚本?

python - 如何在 Windows 上以提升的权限运行脚本

python - 从训练脚本访问 AML 数据存储上的数据

import - Angular2 CLI Socket.io(第 3 方库导入)

ios - 如何在当前现有的ios项目中添加unity项目?

python - 在 Conda 虚拟环境中使用来自 Github 的包

python - 检查对象属性名称是否出现在字符串python中

python - 使用 pandas 从 wunderground 中抓取天气数据

Oracle Unified Directory 导入具有哈希密码的用户