2016-04-07 13 views
-2

Sorun, 'GAMMA SAR ve Interferometry Yazılımı' (GAMMA) çalıştırmayla ilgilidir. GAMMA'daki verileri işlemek için kullanıcının kabukta karmaşık komutlar yazması gerekir. Bu sıkıcı süreç yerine, bu komutları dizge olarak hazırlamak için Python kullanmaya çalışıyorum ve bunları doğrudan Python'dan çalıştırmak/yürütmek istiyorum.dyld: Kitaplık yüklenmedi: libDIFF.dylib (OSX El Capitan'da)

Aşağıda, çalışan bir çözümün basitleştirilmiş bir örneği verilmiştir: Python'da bir dize hazırlayıp komut satırına yazdırıyorum. Daha sonra Python'un kabuğuyla aynı kabukta yazdırdığı dizeyi elle kopyalayıp yapıştırırsam, Gama sorunsuz çalışır.

çalışma kodu:

# Visualize interferogram 
p = 'dismph TMX.int 1189' 
print(p) #copy/pasting this output to a command line runs the external program 

her komut başka kabuğa bir kabuk yapıştırılan kopya/olması gerektiğinden bu sıkıcı alır. Bunun yerine, sadece Python'u çalıştırmak ve komutları çalıştırılan kabuklara yazdırmak istiyorum. Aşağıdaki kod, kabuğa bir dize yazdırma ve yürütme yeteneğine sahiptir.

sorun kodu:

import os 

# Visualize interferogram 
p = 'dismph TMX.int 1189' 
os.system(p) 

Ne yazık ki, aşağıdaki hata iletisi alıyorum.

hata:

dyld: Library not loaded: libDIFF.dylib 

Referenced from: /Users/[username]/[programname]/[functionname]/bin/dismph 
Reason: image not found 
Bu örnek Python 3.5.1 ile OSX El Capitan, Sürüm 10.11.4, üzerinde çalıştırılan

| Anaconda 2.4.1 (x86_64) | [(Apple Inc. 5577 build) GCC 4.2.1] darwin üzerinde (varsayılan, 7 Aralık 2015, 11:24:55):

bu soruyu soran bir başka yolu: yazarak ve koşma arasındaki fark nedir Kabuğun içinde Python'dan aynı dize yazdırma ve yürütme komutu. Teknik olarak, her ikisi de aynı değişkenleri/yolları/kütüphaneleri görmeli, ancak bu durumda bir fark var gibi görünüyor. GAMMA gerekli kütüphaneleri bulamıyor gibi görünmüyor.

+2

herhangi bir kod, sadece teori? – haifzhan

+0

[İlgili soruya bakın] (http://stackoverflow.com/questions/17703510/dyld-library-not-loaded-reason-image-not-loaded). Bir bağımlılığı kaçırdığınız veya gerekli bağımlılığın bulunamayacağı anlaşılıyor. Daha fazla teşhis etmek için bazı kodlara ihtiyacınız var. Hangi işletim sistemi üzerindesiniz? Paylaşılan lib'ler için basit bir yol problemi olabilir. –

+0

Bu, platform bağımlı olabilir.Apple iOS kullanıyor musunuz? Hangi versiyon? Bu 32 veya 64 bitlik bir piton mu? – tdelaney

cevap

0

Başkalarının da bu çözümü görmesi ümidiyle kendi sorumu yanıtlayacağım ve benzer sorunların giderilmesinde onlara yardımcı olacaktır.

Gördüğüm sorun, SIP (Sistem Bütünlüğü Koruması) adlı El Capitan'ın yeni güvenlik yükseltmesi ile ilgili. Belirli ortam değişkenlerinin değiştirilmesini ve korunan sistem dizinlerindeki programların değiştirilmesini önler. El Capitan, alt işlemlerin, kötü amaçlı programların sistem güvenliğini bozmasını önlemek için belirli ortam değişkenlerini yeniden atamasına izin vermez. https://support.apple.com/en-us/HT204899 ve http://www.macworld.com/article/2948140/os-x/private-i-el-capitans-system-integrity-protection-will-shift-utilities-functions.html

basit bir çözüm/usr/local/lib (ya da ilgili varsayılan YOL değişkeni) için paylaşılan nesne kütüphaneleri kopyalamak ve daha sonra tüm önceki gibi çalışır.

El Capitan'daki SIP'yi kapatmak mümkündür, ancak kurtarma bölmesine önyükleme yaparak ve yüklemeniz için SIP'yi kapatarak yapılması gerekir.