簡體   English   中英

無法在不修改 sys.path 的情況下從根目錄導入到子目錄 (Python 3.8)

[英]Unable to import from root directory to subdirectory without modifying sys.path (Python 3.8)

我試過的

首先讓我說,我已經閱讀了可能與此相關的其他 5 或 6 個 stackoverflow 問題,並且已經說過很多事情。 這是我發現的和嘗試過的:

  1. “在其他導入之前執行sys.path.append(<root dir>) 。”

    問題:這可行,但它違反了 PEP 標准做法,所以我寧願找到一個不需要修改sys.path的解決方案。

  2. “使用imp庫找到你的模塊。”

    問題:該答案中概述的解決方案已棄用,因為importlib是新的imp ,即使在查看文檔后我也不確定如何使用importlib

  3. “在您的根目錄中添加一個空的__init__.py文件。”

    問題:這不起作用。

我的問題的詳細信息

這是我的文件結構:

Project/
  ├ subdir/
  |   └ script.py
  ├ __init__.py
  └ module.py

(請注意,我將空的__init__.py文件留在那里以備不時之需。)

我正在嘗試從module.py導入到subdir/script.py

module.py的內容:

def func():
    print('func was called')

subdir/script.py的內容:

from module import func
func()

但是,當我在終端(在 Mac 上)運行python3 script.py時,我收到以下錯誤消息:

Traceback (most recent call last):
  File "script.py", line 1, in <module>
    from module import func
ModuleNotFoundError: No module named 'module'

我將不勝感激不需要修改sys.path的直接解決方案。

解決問題的最簡單方法可能是重組項目:

Project
   ├── script.py
   └── module
         ├── __init__.py
         └── module.py

我通過設置PYTHONPATH解決了我的問題。 就我而言,它適用於此。

PYTHONPATH=<root dir> python3 subdir/script.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM