簡體   English   中英

在 Python 中從另一個腳本導入

[英]Importing From Another Script in Python

我的目錄是這樣的:

isds:
__init__.py
    jobs:
    __init__.py
        adhoc:
        __init__.py
        test.py
        test2.py

我的兩個文件看起來像這樣。

測試.py:

import sys

x = 10

測試2.py:

import sys
from isds.jobs.adhoc.test import *

print(x)

當我從與 test2.py 相同的目錄中運行“python3 test2.py”時,出現此錯誤:ModuleNotFoundError: No module named 'isds.jobs.adhoc.test'

為什么會這樣? 我有init .py 文件,我想我的絕對導入語句是正確的......但也許不是?

謝謝!

由於您是從同一目錄導入模塊,因此您可以簡單地導入使用。

from test import *

為了作為包導入,您需要將文件作為包運行,因此您將導航到包含 isds` 的文件夾並運行:

python -m isds.jobs.adhoc.test2

這將文件作為模塊而不是腳本運行,並且由於它在使用自己的導入的同一級別被索引,因此您正在使用的導入機制按預期工作。

如果你想支持作為腳本運行或作為模塊運行,你需要這樣的東西:

try:
    from isds.jobs.adhoc.test import *
except ModuleNotFoundError:
    from test import *

但這可能會導致其他問題,例如,如果發生未找到不同模塊的錯誤,然后import test最終完全導入其他內容,您可能會得到令人困惑和誤導性的錯誤消息,因此我通常建議只使用-m運行所有內容如果您正在編寫包,請標記。

另請注意,此方法在 python 3.7,4無需任何__init__.py文件3.7,4 我相信不久前刪除了添加空 init 文件的要求。

暫無
暫無

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

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