[英]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.