我正在使用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