我正在使用PyDev在python3中創建一個包。我的一個.py文件有一個簡單的相對導入,from . import filename
。當我使用另一個文件包外,從包中導入並測試了該文件,它工作正常,但在運行該文件直接PyDev的失敗,此錯誤:Python中的__name__,Pydev
ImportError: attempted relative import with no known parent package
很多搜索後,我發現一些代碼,當我在任何進口之前添加它時,工作:
__path__ = [""] # indicates local directory
__package__ = ["package_name"]
然後一切運行良好。然而,只是一個測試,在該文件中我把這一行:print(__name__)
輸出是兩個字符串!
package_name
__main__
我懷疑這是隻是因爲它是在一個包,並直接運行,但後來我怎麼做這樣的事情if __name__ == "__main__":
?
這裏有一些更多的輸出,當我搞砸與周圍的__name__
VAR更多:
print(repr(__name__))
# output
'package_name'
'__main__'
print(__name__.endswith("__main__"))
# output
False
True
print(type(__name__))
# output
<class 'str'>
<class 'str'>
我甚至不明白一個變量如何能夠分配給它的兩個獨立的字符串。到底是怎麼回事?
這聽起來像這個文件實際上運行兩次。有幾種方法可能會讓進口系統混淆足以發生這種情況。 – user2357112
到目前爲止,最簡單的解決方案就是不嘗試直接運行軟件包內容,但不嘗試將同一文件製作爲可導入的模塊和腳本。 – user2357112
@ user2357112它運行兩次很有意義,關於如何發生的任何想法?爲了迴應您的其他評論,我認爲這就是我現在要做的。這個文件並不是真的需要成爲一個可運行的腳本,我只是感興趣的是它不會在運行時產生錯誤。謝謝您的幫助! – Cole128