亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PyCharm 導入與解釋器

PyCharm 導入與解釋器

慕容3067478 2023-12-08 17:21:43
PyCharm 項目結構如下:testImport    target        __init__.py        script_1.py        script_2.py內容如下:#script_1.pyimport datetimenow_ts = datetime.datetime.now()#script_2.pyfrom script_1 import now_tsprint('Now: {}'.format(now_ts))PyCharm 要求我更正script_2.py文件中的導入行并使用from target.script_1 import now_ts. 一旦我嘗試執行,~/testImport: ./target/script_2.py我就會得到ModuleNotFoundError: No module named 'target'。PyCharm 怎么可能建議錯誤的解決方案,或者是否發生了我不知道的事情?
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

PyCharm 建議可能是因為 IDE 認為您的target文件夾是一個模塊。模塊中包含可執行腳本被視為反模式。

我對此以及任何其他提議的主要?機械的調整都是-1。唯一的用例似乎是運行恰好位于模塊目錄內的腳本,我一直將其視為反模式。為了讓我改變主意,你必須讓我相信事實并非如此。

我建議您更改項目的結構,使主要邏輯位于模塊中,而可執行文件位于模塊之外,即:

testImport
├──?script_1.py
└──?target
????└──?my_logic.py

在你的 script_1.py 中:

from?target.my_logic?import?now_ts

注意:當然,我在這里只是使用對權威的呼吁作為論據。根據您的用例,繼續您正在開發的方式可能會更好。在這種情況下,只需忽略 IDE 建議即可。


查看完整回答
反對 回復 2023-12-08
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

關鍵是,當您以默認方式運行腳本時python ./target/script_2.py,解釋器將被視為script_2主模塊,不會讓您找到上層文件夾。


您可以通過以下方式來避免運行ModuleNotFoundError(僅當您清楚地了解自己在做什么時,不要在大型項目中使用):


在~/testImport運行中python -m target.script_2

script_2.py 添加在頂部

__package__ = "target.script_2"

script_2.py 添加在頂部

if __name__ == "__main__":

    import sys

    import os

    sys.path.insert(0, os.path.abspath(os.curdir))

進入~/testImport并運行python ./target/script_2.py


如果有人能幫助我糾正我不自然的英語,我將非常感激。


查看完整回答
反對 回復 2023-12-08
  • 2 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號