使用pycharm 2017.3(edu)和python3.6.4
modulesTut1.py:
import modulesTut2
print(__file__)
modulesTut2.py:
def f():
print("f1")
print(__file__)
v = [1, 2, 3, 4, 5]
OUTPUT ::
C:\Users\shashank\PycharmProjects\python_rest\modulesTut2.py
C:/Users/shashank/PycharmProjects/python_rest/modulesTuts1.py
当我使用
时,它确实得到修复__file__ = os.path.abspath(__file__)
在两个文件中打印__file__变量之前。
答案 0 :(得分:1)
这种现象确实存在并且似乎非常简单:对于导入的模块,__file__
使用OS本机表示法,但对于作为命令行参数传递给Python的主.py文件,它只是包含与参数一起提供的内容。
我们说我们有文件夹C:\Users\me\Python\test\extra
和文件
C:\Users\me\Python\test\a.py
:
import b
print(__file__)
C:\Users\me\Python\test\b.py
:
print(__file__)
然后,如果您留在C:\Users\me\Python\test
并输入python a.py
,您将获得
C:\Users\me\Python\test>python a.py C:\Users\me\Python\test\b.py a.py
如果你留在任何地方,并输入完整路径,请python C:\Users\me\Python\test\a.py
:
C:\>python C:\Users\me\Python\test\a.py C:\Users\me\Python\test\b.py C:\Users\me\Python\test\a.py
但是,如果你只是将一些反斜杠切换为正斜杠,那也会起作用:
C:\>python C:\Users/me/Python\test\a.py C:\Users\me\Python\test\b.py C:\Users/me/Python\test\a.py
也会显示相对路径,包括..
:
C:\Users\me\Python\test\extra>python ..\a.py C:\Users\me\Python\test\b.py ..\a.py
甚至
C:\User\me\Python\test\extra>python c:../..\test\a.py C:\User\me\Python\test\b.py c:../..\test\a.py
TL; DR:PyCharm似乎通过正斜杠传递完整路径,这就是你在__file__
中得到的。