ImportError: cannot import X from the file that has if __name__ == "__main__". Any solutions without delete if __name__ == "__main__"?
ImportError: cannot import X from the file that has if __name__ == "__main__". Any solutions without delete if __name__ == "__main__"?
我在同一文件夹中有 2 个文件 n1711_001_insilico
和 n1711_002_insilico
。我想要第一个文件中的两个变量(mzdf
即 <class 'pandas.core.frame.DataFrame'>
,charge
是 'int'
),所以我在第二个文件的顶部执行 import
:
import numpy as np
import pandas as pd
from n1711_001_insilico import mzdf, charge
我得到了 ImportError: cannot import name mzdf
(以及 charge
)。在第一个文件中,我从函数中显式 return mzdf
和 charge
并像这样调用它们:
if __name__ == "__main__":
mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)
更新:从评论中我现在知道问题来自第一个文件中的 if __name__ == "__main__":
。有什么方法可以在不删除 if __name__ == "__main__"
?
的情况下解决这个问题
在您尝试导入的文件中,您有以下语句:
if __name__ == "__main__":
mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)
这意味着只有在命令行中直接执行文件,例如使用python n1711_001_insilico.py
,命令CALC
实际上运行并被执行,这就是设置两个变量 mzdf
和 charge
.
的函数
也就是说,只有当你运行直接用python n1711_001_insilico.py
的文件时,这两个变量才存在,导入的时候,Python不会运行那个功能。
这是设计使然;导入文件后,变量 __name__
指向文件名,因此条件失败。
现在,要解决此问题,您必须在导入文件时 运行 CALC
函数,并获取您自己的结果副本:
import numpy as np
import pandas as pd
from n1711_001_insilico import peptides_report, aa_dict, CALC
mzdf, charge = CALC(peptides_report, aa_dict, charge_form=1, charge_to=6)
我在同一文件夹中有 2 个文件 n1711_001_insilico
和 n1711_002_insilico
。我想要第一个文件中的两个变量(mzdf
即 <class 'pandas.core.frame.DataFrame'>
,charge
是 'int'
),所以我在第二个文件的顶部执行 import
:
import numpy as np
import pandas as pd
from n1711_001_insilico import mzdf, charge
我得到了 ImportError: cannot import name mzdf
(以及 charge
)。在第一个文件中,我从函数中显式 return mzdf
和 charge
并像这样调用它们:
if __name__ == "__main__":
mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)
更新:从评论中我现在知道问题来自第一个文件中的 if __name__ == "__main__":
。有什么方法可以在不删除 if __name__ == "__main__"
?
在您尝试导入的文件中,您有以下语句:
if __name__ == "__main__":
mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)
这意味着只有在命令行中直接执行文件,例如使用python n1711_001_insilico.py
,命令CALC
实际上运行并被执行,这就是设置两个变量 mzdf
和 charge
.
也就是说,只有当你运行直接用python n1711_001_insilico.py
的文件时,这两个变量才存在,导入的时候,Python不会运行那个功能。
这是设计使然;导入文件后,变量 __name__
指向文件名,因此条件失败。
现在,要解决此问题,您必须在导入文件时 运行 CALC
函数,并获取您自己的结果副本:
import numpy as np
import pandas as pd
from n1711_001_insilico import peptides_report, aa_dict, CALC
mzdf, charge = CALC(peptides_report, aa_dict, charge_form=1, charge_to=6)