首页 > 解决方案 > 避免使用 `sys.path.append(..)` 进行导入

问题描述

这不是我第一次imports在 Python 中畏缩。但我想这是一个有趣的用例,所以我想在这里问它以获得更好的洞察力。我的项目结构如下:

sample_project
   - src
        - __init__.py
        - module1
           - __init__.py
           -  utils.py
        - module2
           - __init__.py 
           - models.py
        - app.py

从所有其他的module1导入方法module2和导入方法。app此外,当您运行它时,app它需要在文件夹logs之外创建一个名为的src文件夹。现在有运行应用程序的方法:

  1. 从里面的src文件夹flask run app
  2. src文件夹外部flask run src.app

为了确保我不会import errors因为启动应用程序的顶级模块的更改而得到,我这样做:

import sys
sys.path.append("..")

这个问题有更好的解决方案吗?

标签: pythonpython-3.xpython-importimporterror

解决方案


导入问题的Pythonic 解决方案不要将 sys.path(或间接 PYTHONPATH)hack添加到任何可能用作顶级脚本(包括单元测试)的文件中,因为这会使您的代码库难以更改和维护。假设您必须重新组织项目结构或重命名文件夹。

相反,这是editable installs为之而生的。它们可以通过两种方式实现:

  1. pip install --editable <path>(需要基本的 setup.py)
  2. conda develop <path>(需要conda-build软件包)

无论哪种方式都会将符号链接添加到您的站点包文件夹中,并使您的本地项目表现得好像它已完全安装,同时您可以继续编辑。

永远记住:让事情容易改变


推荐阅读