I 3rd-Party-Code mit Anaconda 4.2/Python 3.5 Wenn ich Tests zu testen, versuche ausführen ich folgende Ausnahme erhalten:Attribute: Modul 'functools' hat kein Attribut 'Wraps'
Traceback (most recent call last):
File "pyspark/sql/tests.py", line 25, in <module>
import subprocess
File "/home/user/anaconda3/lib/python3.5/subprocess.py", line 364, in <module>
import signal
File "/home/user/anaconda3/lib/python3.5/signal.py", line 3, in <module>
from functools import wraps as _wraps
File "/home/user/anaconda3/lib/python3.5/functools.py", line 22, in <module>
from types import MappingProxyType
File "/home/user/Spark/spark-2.1.0-bin-hadoop2.7/python/pyspark/sql/types.py", line 22, in <module>
import calendar
File "/home/user/anaconda3/lib/python3.5/calendar.py", line 10, in <module>
import locale as _locale
File "/home/user/anaconda3/lib/python3.5/locale.py", line 108, in <module>
@functools.wraps(_localeconv)
AttributeError: module 'functools' has no attribute 'wraps'
Normalerweise würde ich einige davon ausgehen, Modul Shadowing eingebaute Module, aber soweit ich das sagen kann, ist nicht das Problem:
- I Modulpfad angemeldet (
functools.__file__
) aus den Tests und es ergibt erwarteten Pfad. Auch gibt es nichts seltsames in dem Weg, den ich in der Ausnahme bekomme. - Um mögliche Modulkorruption auszuschließen, habe ich komplett neue Anaconda-Installation getestet.
- Wenn ich Tests, mit der gleichen Konfiguration und Pfad, von IPython Shell (
%run pyspark/sql/tests.py
) Problem verschwindet. functools.wraps
kann in der Shell importiert werden, die im selben Verzeichnis und mit der gleichen Konfiguration gestartet wurde.- Wenn ich Python 3-Umgebung mit Python 2-Umgebung ersetzen, verschwindet das Problem.
- Das Problem kann nicht reproduziert werden, wenn die Umgebung mit
virtualenv
erstellt wurde.
Mit anderen Version des gleichen Projekts erhalte ich:
Traceback (most recent call last):
File "pyspark/sql/tests.py", line 25, in <module>
import pydoc
File "/home/user/anaconda3/lib/python3.5/pydoc.py", line 55, in <module>
import importlib._bootstrap
File "/home/user/anaconda3/lib/python3.5/importlib/__init__.py", line 57, in <module>
import types
File "/home/user/Spark/spark-1.6.3-bin-hadoop2.6/python/pyspark/sql/types.py", line 22, in <module>
import calendar
File "/home/user/anaconda3/lib/python3.5/calendar.py", line 10, in <module>
import locale as _locale
File "/home/user/anaconda3/lib/python3.5/locale.py", line 19, in <module>
import functools
File "/home/user/anaconda3/lib/python3.5/functools.py", line 22, in <module>
from types import MappingProxyType
ImportError: cannot import name 'MappingProxyType'
Gibt es etwas offensichtlich, dass ich hier verpasst?
bearbeiten:
Dockerfile, die verwendet werden können, um das Problem zu reproduzieren:
FROM debian:latest
RUN apt-get update
RUN apt-get install -y wget bzip2
RUN wget https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86_64.sh
RUN bash Anaconda3-4.2.0-Linux-x86_64.sh -b -p /anaconda3
RUN wget ftp://ftp.piotrkosoft.net/pub/mirrors/ftp.apache.org/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.7.tgz
RUN tar xf spark-2.1.0-bin-hadoop2.7.tgz
ENV PATH /anaconda3/bin:$PATH
ENV SPARK_HOME /spark-2.1.0-bin-hadoop2.7
ENV PYTHONPATH $PYTHONPATH:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$SPARK_HOME/python
WORKDIR /spark-2.1.0-bin-hadoop2.7
RUN python python/pyspark/sql/tests.py
Was ist deine 'functools .__ file__'? Sie haben gesagt, dass Sie es protokolliert haben (ich hoffe, Sie haben es dort protokolliert, wo die Ausnahme auftritt, richtig?), Was zeigt es, wenn Sie es normal ausführen und was es zeigt, wenn Sie es aus der IPython-Shell ausführen? – MSeifert
@MSeifert Es zeigt den gleichen Pfad beide Male, und es ist der, den ich in tracebacks ('/ home/user/anaconda3/lib/python3.5/functools.py') sehe. – user7487351
nur um einen häufigen Fehler auszuschließen: haben Sie versucht, den fehlgeschlagenen Befehl aus einem anderen Verzeichnis aufzurufen? – MSeifert