繁体   English   中英

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

[英]Confused with python import (absolute and relative)

我为它创建了项目和帮助模块。 但是一些模块正在相互使用,例如 worker 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) 编写一个 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 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM