Python出现错误:"from: can't read /var/mail/Bio"

119

我正在运行一个(bio)python脚本,结果出现以下错误:

from: can't read /var/mail/Bio

考虑到我的脚本与邮件无关,我不明白为什么我的脚本要查找 /var/mail 目录。

这里似乎有什么问题?虽然我怀疑脚本并不是问题所在,但是我还是提供一下我的脚本:

from Bio import SeqIO
from Bio.SeqUtils import ProtParam

handle = open("examplefasta.fasta") 
for record in SeqIO.parse(handle, "fasta"): 
    seq = str(record.seq)
    X = ProtParam.ProteinAnalysis(seq)
    print X.count_amino_acids() 
    print X.get_amino_acids_percent() 
    print X.molecular_weight() 
    print X.aromaticity() 
    print X.instability_index() 
    print X.flexibility() 
    print X.isoelectric_point() 
    print X.secondary_structure_fraction()

这里有什么问题?是Python设置不当吗?我真的不认为是脚本的问题。
7个回答

243
不是脚本的问题,而是你的脚本根本没有被 Python 执行。如果你的脚本存储在名为 script.py 的文件中,你必须使用 python script.py 命令来执行它,否则默认 shell 将会执行它,并在 from 关键字处退出。(顺便说一下,from 是一个命令行实用程序的名称,该程序打印发送邮件给指定用户名的人的姓名,因此它尝试访问邮箱。)
另一个可能性是将以下行添加到脚本的顶部:
#!/usr/bin/env python

这将指示您的 shell 通过 python 执行脚本,而不是尝试自行解释它。


18

当我尝试运行一个命令时,遇到了一个类似的错误。 在阅读Tamás的答案后, 我意识到我不是在Python中尝试运行此命令,而是在shell中(这可能会发生在那些新手Linux用户身上)。

解决方案是先用命令python进入Python shell, 当你看到这些>>>时再运行任何Python命令。


6

我也遇到了同样的问题。在django项目中,通过终端运行导入命令而没有通过manage.py激活python3 shell时,我会遇到这个错误(是的,我还是个新手)。正如人们所期望的那样,激活shell允许正确解释命令。

./manage.py shell

然后才

>>> from django.contrib.sites.models import Site

5
将以下代码放在您的.py文件顶部(适用于Python 2.x):
#!/usr/bin/env python 

或者适用于 Python 3.x

#!/usr/bin/env python3

这应该是查找Python环境。如果没有它,将执行代码,就好像它不是Python代码,而是shell代码。如果您需要指定Python环境的手动位置,请放置

#!/#path/#to/#python

顺便说一句,在某些系统上,由于Python 2已经停止支持,现在可能不需要指定“python3”。 - wjandrea

1

#! 双重检查你的 shebang 行
我的情况: 在 PyCharm 或 Jupyter 中,这是可以的(因为它们不涉及 shebang 行),但当我从命令行运行相同的代码片段时,报错了,can't read /var/mail/blah,我真是束手无策。为什么# !/usr/bin/env python3会出问题呢?
我花了90分钟来解决它,所以我来到这里。 最终,我发现在#!之间有一个空格,于是我把它去掉了。现在一切都好了!

好了,但为什么是/var/mail/呢?:如果 shebang 不完整(或没有),则执行了一个 shell 命令from(用于 Bio import seqIO).
在这种情况下,from 不是 Python 关键字,而是一个实用程序命令,它会打印调用者邮箱中的邮件头信息。有关详情,请在终端上尝试man from


0
对于 Flask 用户,在编写命令之前,请确保您使用以下命令进入 Flask shell:
flask shell

0

对于 Mac OS,只需进入应用程序并运行这些脚本 Install Certificates.command 和 Update Shell Profile.command,现在它将正常工作。


1
那些到底是做什么的? - wjandrea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接