Python-Fehler "von: kann / var / mail / Bio nicht lesen"

92

Ich führe ein (Bio-) Python-Skript aus, das zu folgendem Fehler führt:

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

Da mein Skript nichts mit Mail zu tun hat, verstehe ich nicht, warum mein Skript in / var / mail sucht.

Was scheint hier das Problem zu sein? Ich bezweifle, dass es helfen wird, da das Skript nicht das Problem zu sein scheint, aber hier ist trotzdem mein Skript:

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()

Was ist das Problem hier? schlechtes Python-Setup? Ich glaube wirklich nicht, dass es das Drehbuch ist.

brucezepplin
quelle

Antworten:

189

Nein, es ist nicht das Skript, sondern die Tatsache, dass Ihr Skript überhaupt nicht von Python ausgeführt wird. Wenn Ihr Skript in einer Datei mit dem Namen gespeichert ist script.py, müssen Sie es als ausführen python script.py, andernfalls wird es von der Standard-Shell ausgeführt und beim fromSchlüsselwort gerettet. (Übrigens fromist dies der Name eines Befehlszeilenprogramms, das die Namen derjenigen druckt, die E-Mails an den angegebenen Benutzernamen gesendet haben. Deshalb wird versucht, auf die Postfächer zuzugreifen.)

Eine andere Möglichkeit besteht darin, die folgende Zeile am oberen Rand des Skripts hinzuzufügen:

#!/usr/bin/env python

Dadurch wird Ihre Shell angewiesen, das Skript über auszuführen, pythonanstatt zu versuchen, es selbst zu interpretieren.

Tamás
quelle
10
Oder #!/usr/bin/python/
kirbyfan64sos
13
Ja, es pythonsei denn, es befindet sich woanders. Ich bevorzuge die env-basierte Lösung, da Python einfach im Standardpfad des Benutzers nachgeschlagen wird.
Tamás
Hmmm ... davon habe ich noch nie gehört. Sehr richtig.
Kirbyfan64sos
2
ausgezeichnet - danke, dass du auf meinen Schülerfehler hingewiesen hast. Ich mache den Übergang von der Eingabe an der Python-Eingabeaufforderung zur Ausführung von Skripten.
Brucecepplin
Danke. Ich bin kein Python-Codierer, aber ich muss dies für meine Aufgabe tun.
Arn-Arn
14

Ich bin auf einen ähnlichen Fehler gestoßen

"from: kann /var/mail/django.test.utils nicht lesen"

beim Versuch, einen Befehl auszuführen

>>> from django.test.utils import setup_test_environment
>>> setup_test_environment()

im Tutorial unter https://docs.djangoproject.com/de/1.8/intro/tutorial05/

Nachdem ich die Antwort von Tamás gelesen hatte, stellte ich fest, dass ich diesen Befehl nicht in der Python-Shell, sondern im Termnial versuchte (dies kann denjenigen passieren, die neu in Linux sind).

Die Lösung bestand darin, zuerst mit dem Befehl python in die Python-Shell einzutreten und dann, wenn Sie diese >>> erhalten, alle Python-Befehle auszuführen

Ehsan Quranwala
quelle
5

Hier gilt das gleiche. Ich hatte diesen Fehler, als ich einen Importbefehl vom Terminal aus ausführte, ohne die Python3-Shell über manage.py in einem Django-Projekt zu aktivieren (ja, ich bin noch ein Neuling). Wie zu erwarten war, konnte durch Aktivieren der Shell der Befehl korrekt interpretiert werden.

./manage.py shell

und nur dann

>>> from django.contrib.sites.models import Site
Sergii Shcherbak
quelle
3

Fügen Sie dies oben in Ihre .py-Datei ein (für Python 2.x).

#!/usr/bin/env python 

oder für Python 3.x.

#!/usr/bin/env python3

Dies sollte die Python-Umgebung nachschlagen, ohne sie wird der Code so ausgeführt, als wäre es kein Python-Code, sondern direkt zur CLI. Wenn Sie einen manuellen Speicherort der Python-Umgebung angeben müssen, setzen Sie

#!/#path/#to/#python
Z. Davey
quelle
1

Ich habe den gleichen Fehler erhalten, weil ich versucht habe, weiterzulaufen

XXX-Macmini:Python-Project XXX.XXX$ from classDemo import MyClass

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

Um dies zu lösen, geben Sie den Befehl python ein. Wenn Sie diese >>> erhalten, führen Sie alle Python-Befehle aus

>>>from classDemo import MyClass
>>>f = MyClass()
Dhara Patel
quelle
-1

Für Mac OS gehen Sie einfach zu den Anwendungen und führen Sie diese Skripte aus. Install Certificates.command und Update Shell Profile.command, jetzt funktioniert es.

Suraj Kumar
quelle