it-swarm.com.de

Wie erzwinge ich, dass Python bei Snow Leopard und anderen 32-Bit/64-Bit-Fragen 32-Bit ist?

Wenn ich Folgendes von einer Bash-Shell auf meinem Mac aus ausführen:

$ file /usr/bin/python

Ich bekomme die folgenden drei Zeilen:

/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc

scheint dies darauf hinzuweisen, dass Python für alle drei Architekturen kompiliert wurde oder ähnliches? Ich glaube, basierend auf einigen Fehlern, die ich beim Versuch, MySQL einzurichten, hatte, dass ich die 64-Bit-Version verwende. Also zwei Fragen:

  1. Wie hätte ich das gewusst?

  2. Wie kann ich Python stattdessen in 32-Bit ändern? Etwas weniger drastisch als mit anderen Kompilierungseinstellungen neu kompilieren?

  3. Warum gibt Arch aus einer Bash-Shell i386 zurück, was darauf hindeutet, dass ich mich nicht im "64-Bit-Modus" befinde, wenn ich weiß, dass mein Prozessor auf einem 64-Bit-Mac basiert?

Tut mir leid, das sind wahrscheinlich alle Fragen von Neulingen. Die ganze 32/64-Bit-Sache frustriert den Mist von mir und ich bin sicher, dass es einige Befehle/Tools gibt, die das einfacher machen.

36
Bialecki
  1. Sie können viel über die Python-Version herausfinden, die Sie ausführen, über das Modul platform (das Modul sys hat auch einige einfache Helfer).

  2. Unter Mac OS X können Sie eine "fette Binärdatei" mit Ihrer gewählten Architektur ausführen, z.

    Arch -i386/usr/bin/python

Not empfehle ich,/usr/lib/python selbst zu ändern (mit dem Befehl lipo) - Sie könnten Ihr System leicht unbrauchbar machen, indem Sie Systemdateien manipulieren. Vielleicht ist die Installation eines separaten Python von python.org (für Anwendungszwecke), während Sie das System verlassen, Python allein eine akzeptable Strategie für Sie - es ist definitiv sicherer als das Ändern von Systemdateien! -)

Was Ihre dritte Frage betrifft, hmmm, ist diese Frage für mich stumpf - und definitiv eine Frage für superuser.com (und ist völlig unabhängig von Python, es scheint auch völlig unabhängig von der Programmierung zu sein ;-).

30
Alex Martelli

http://www.jaharmi.com/2009/08/29/python_32_bit_execution_on_snow_leopard

$ defaults write com.Apple.versioner.python Prefer-32-Bit -bool yes

24
danielrsmith

Fix für die Verwendung von Virtualenv auf Snow Leopard

die Antwort von danielrsmith funktioniert für mich, wenn ich nicht virtualenv verwende, aber virtualenv erstellt eine Kopie der ausführbaren Python-Datei, die dazu führt, dass sie nicht funktioniert:

$ which python
/Users/cogg/.virtualenvs/tweakeats/bin/python

$ python
[...]
>>> import sys
>>> sys.maxint
9223372036854775807

da dies eine Kopie von Python ist, habe ich Lipo verwendet, um die 64-Bit-Architektur zu entfernen. Dadurch kann ich 32-Bit-Python 2.6 mit virtualenv verwenden:

$ lipo -info /Users/cogg/.virtualenvs/tweakeats/bin/python
Architectures in the fat file: /Users/cogg/.virtualenvs/tweakeats/bin/python are: x86_64 i386 ppc7400
$ mv /Users/cogg/.virtualenvs/tweakeats/bin/python /Users/cogg/.virtualenvs/tweakeats/bin/python.old
$ lipo -remove x86_64 /Users/cogg/.virtualenvs/tweakeats/bin/python.old -output /Users/cogg/.virtualenvs/tweakeats/bin/python
$ python
[...]
>>> import sys
>>> sys.maxint
2147483647
19
cogg

Die Antwort wurde akzeptiert. Aber ich denke, die dritte Frage ist noch unbeantwortet. Ich fand es eine interessante Frage und recherchierte auch dafür. Hier ist die Antwort, die ich in einem anderen SO Forum gefunden habe - 

SnowLeopard führt 32-Bit-Systemsoftware und -anwendungen auf 32-Bit-Intel-Computern sowie 64-Bit-Systemsoftware und 32-Bit- und 64-Bit-Anwendungen auf 64-Bit-Intel-Computern aus. Die Desktop-Version von Snow Leopard startet aus Gründen der Kext- und Treiber-Kompatibilität einen 32-Bit-Kernel. Der gesamte Benutzerbereich wird jedoch mit 64-Bit ausgeführt. Mac OS X Server startet in einen 64-Bit-Kernel. Core 2 Duo ist eine 64-Bit-Maschine. Versuchen Sie $ sysctl hw.cpu64bit_capable oder sysctl hw.optional.x86_64, um sich zu vergewissern, dass Sie eine 64-Bit-CPU haben. Arch zeigt immer i386 auf Intel-Hardware in Leopard und Snow Leopard. - cdespinosa 22. September 09 um 04:23

Original-Link - Mac OSX 10.6-Compiler: eine rätselhafte Erfahrung mit 32 vs. 64 Bit

6
Sumod

die dritte Frage betrifft den 32/64-Bit-Kernel

nur weil Sie ein 64-Bit-fähiges Betriebssystem und einen 64-Bit-fähigen CPU-Prozessor haben, bedeutet das nicht, dass Sie unter Mac OSX einen 64-Bit-Kernel starten

Wenn Sie ab Werk einen Mac mit 10,6 Schneeleoparden erhalten, wird er standardmäßig im 32-Bit-Modus ausgeliefert

sie müssen die Systemeinstellung bearbeiten, um den 64-Bit-Modus zu starten

(Nicht sicher bei Änderungen an 10.7 oder 10.8, da der letzte Schnee, den ich verwende, Snow Leo ist, aber ich glaube, dass er 64-Bit-Kernel per Werkseinstellung booten kann.)

10.6 - Vom Terminal aus den Befehl ausführen:

 :*Sudo nvram boot-args="Arch=x86_64"

ODER 

10.6 - Vom Terminal aus den Befehl ausführen:

Sudo defaults write /Library/Preferences/SystemConfiguration/com.Apple.Boot 'Kernel Flags' 'Arch=x86_64'
0
hackg

Nach vielen Versuchen und Fehlern, bei denen ich einige der oben genannten Vorschläge ausprobierte, bin ich auf den folgenden Symlink gestoßen:

/usr/local/bin/python2-32

zeigt auf:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-32

Und ich stelle fest, dass wenn ich diesen Python starte, er im 32-Bit-Modus startet (im Gegensatz zu /Library/Frameworks/Python.framework/Versions/2.7/bin/python2). Dies kann im Aktivitätsmonitor beobachtet werden.

Hinweis: Wie andere schon erwähnt haben, ist platform.architecture() nicht immer ein guter Indikator. Es zeigt "64-Bit" für diesen 32-Bit-Prozess.

0
Pyderman

Ich habe verschiedene Möglichkeiten zur Ausführung des Skype4Py-Testskripts ausprobiert.

Arch -i386

Was am Ende funktionierte, bestand darin, den segfault-Pfad nach der beanspruchten 64-Bit-Version von Python zu durchsuchen und dies in meine Header-Datei aufzunehmen: #!/System/Library/Frameworks/Python.framework/Versionen/2.7/Resources/Python.app/Inhalt/MacOS/Python

Nachdem ich diese Zeile an die oberste Stelle gesetzt und Ausführungsberechtigungen für meine Datei hinzugefügt habe, könnte ich .__ verwenden. Arch -i386 skype.py

Und es würde ohne Probleme laufen.

0
elec3647