2017-07-05 4 views
0

Fondamentalement, j'essaie d'exécuter du code Python à partir du module savReaderWriter afin de créer un fichier .sav prêt à ouvrir dans IBM SPSS. En tant qu'utilisateur macOS que je devais exécuter ces deux lignes dans le premier terminal pour le module de travail:Bibliothèque (dylib) non chargée - image non trouvée - IDE Python

echo 'export DYLD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos' >> ~/.bash_profile 
echo 'export LC_ALL=en_US.UTF-8' >> ~/.bash_profile 

Ci-dessous vous pouvez voir un morceau de code que je suis en train de courir en Python:

import savReaderWriter 

savFileName = "someFile.sav" 
records = [['Test1', 1, 1], ['Test2', 2, 1]] 
varNames = ['var1', 'v2', 'v3'] 
varTypes = {'var1': 5, 'v2': 0, 'v3': 0} 
with savReaderWriter.SavWriter(savFileName, varNames, varTypes, ioUtf8=True) as writer: 
    for record in records: 
     writer.writerow(record) 

Mon problème est que lors de l'exécution du code en Python via terminal.app fonctionne comme un charme et un nouveau fichier .sav apparaît, en essayant d'exécuter le même code dans un IDE (essayé PyCharm et Spyder) me donne une erreur:

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2847, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-2-94007b092d47>", line 7, in <module> 
    with savReaderWriter.SavWriter(savFileName, varNames, varTypes, ioUtf8=True) as writer: 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/savWriter.py", line 198, in __init__ 
    super(Header, self).__init__(savFileName, ioUtf8, ioLocale) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/generic.py", line 29, in __init__ 
    self.spssio = self.loadLibrary() 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/generic.py", line 117, in loadLibrary 
    spssio = self._loadLibs("macos") 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/generic.py", line 89, in _loadLibs 
    return [load(os.path.join(path, lib)) for lib in libs][-1] 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/generic.py", line 89, in <listcomp> 
    return [load(os.path.join(path, lib)) for lib in libs][-1] 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ctypes/__init__.py", line 348, in __init__ 
    self._handle = _dlopen(self._name, mode) 
OSError: dlopen(/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos/libicuuc48.1.dylib, 6): Library not loaded: @executable_path/../lib/libicudata48.1.dylib 
    Referenced from: /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos/libicuuc48.1.dylib 
    Reason: image not found 

L'auteur du module n'a pas pu m'aider à ce sujet, donc je serais très heureux de recevoir des suggestions de cette communauté.

EDIT (ajouté sys.path):

Depuis le terminal:

['', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages', 
'/Users/mg/mne-python'] 

De IDE:

['/Applications/PyCharm.app/Contents/helpers/pydev', 
'/Users/mg/Documents/Python/Projects/MD', 
'/Applications/PyCharm.app/Contents/helpers/pydev', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages', 
'/Users/mg/mne-python', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/extensions', 
'/Users/mg/Documents/Python/Projects/MD'] 

Cordialement,

MG

Répondre

0

Trouvé la solution!

Fondamentalement, je besoin de créer des liens symbiotiques à tous les dylib qui est apparu dans l'erreur, les exemples ci-dessous:

sudo ln -s /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos/libicudata48.1.dylib /usr/local/lib/libicudata48.1.dylib 
sudo ln -s /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos/libicui18n48.1.dylib /usr/local/lib/libicui18n48.1.dylib 
sudo ln -s /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos/libspssdio.dylib /usr/local/lib/libspssdio.dylib 
sudo ln -s /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos/libzlib123spss.dylib /usr/local/lib/libzlib123spss.dylib 

donc théoriquement parlant:

sudo ln -s /path/to/original /path/to/symbiotic/link 

Cordialement,

MG

0

Je ne suis pas une personne Mac, mais utilisez-vous vraiment Python 3.6? Est-ce que le savReaderWriter supporte cette version? Je doute que le module d'E/S qu'il utilise soit construit pour cette version.

Si cela fonctionne via Terminal mais pas un EDI, vérifiez que les chemins de recherche Python sont les mêmes.

+0

Bien qu'il ne supporte pas la version 3.6, cela fonctionne pour moi ok (dans le terminal au moins). Tous les chemins de recherche qui apparaissent dans le terminal apparaissent également dans l'EDI. –

+0

Dans le même ordre? Bizarre. – JKP

+0

Sortie sys.path ajoutée –