Module Python et Emacs
Le
lionmarron
Bonjour,
Je ne sais pas si le problème est connu, et j'imagine qu'il devrait être
facile à résoudre (mais l'expérience apprend à être méfiant) :
Il s'agit de scripts Python lancé depuis Emacs, et des modules situés
dans le répertoire courant provoquent :
ImportError: No module named <nom module>
En mode direct depuis Emacs même message d'erreur. Pourtant Tkinter est
trouvé, donc c'est seulement les modules situés dans le répertoire
courant qui ne sont pas trouvés.
En revanche si Python lancé depuis le terminal (l'histoire se passe sous
ubuntu) les mêmes modules sont trouvés.
Je pourrais peut-être essayer de mettre mes modules aux même endroit que
ceux fourni avec Python, mais il me semble que tel n'est pas l'usage.
--
lionmarron
Je ne sais pas si le problème est connu, et j'imagine qu'il devrait être
facile à résoudre (mais l'expérience apprend à être méfiant) :
Il s'agit de scripts Python lancé depuis Emacs, et des modules situés
dans le répertoire courant provoquent :
ImportError: No module named <nom module>
En mode direct depuis Emacs même message d'erreur. Pourtant Tkinter est
trouvé, donc c'est seulement les modules situés dans le répertoire
courant qui ne sont pas trouvés.
En revanche si Python lancé depuis le terminal (l'histoire se passe sous
ubuntu) les mêmes modules sont trouvés.
Je pourrais peut-être essayer de mettre mes modules aux même endroit que
ceux fourni avec Python, mais il me semble que tel n'est pas l'usage.
--
lionmarron

Poser une question


Bonjour,
après quelques tests, j'ai vu qu'il fallait d'abord charger les fichie rs
C-c C-l et ensuite indiquer quel fichier on souhaitait utiliser avec
C-c C-c
# ex1.py
def hello ():
print("Hello")
# ex2.py
from ex1 import hello
def test ():
hello()
C-x C-f ex1.py
C-c C-l RET
C-x C-f ex2.py
C-c C-l RET
C-c C-c
C-c C-z
test() RET
lionmarron
Es-tu sûr que ce que tu appelles le répertoire courant est réellement le
répertoire courant de ton Emacs ? As-tu lancé Emacs depuis ce répertoire
? Ou bien as-tu lancé la fonction cd d'Emacs pour changer de répertoire
courant ? Si ce n'est pas le cas, il y a de fortes chances que le
répertoire courant de ton Emacs soit en fait ${HOME}.
Effectivement, ça serait très sale et inutile :-)
--
Librement,
Vivien
lionmarron
Ce n'est pas un problème lié à Emacs mais à Python. Il faut regarder du
côté de la variable sys.path (et éventuellement du côté de
site.getusersitepackages()).
Exécuter le script suivant dans les différents contextes (emacs,
terminal, etc.) et vous comprendrez la différence :
# début python
import sys
import site
print sys.path
print site.getusersitepackages()
# fin python
--
Paul Gaborit -
C'est là que je me rend compte des limites de mes connaissance du
système Linux, ou de l'informatique en général. Il faudra sans doute que
je consulte ma documentation Linux ; toujours est-il que je ne comprends
pas bien ce qu'affiche ce script.
print sys.path n'affiche pas les mêmes choses depuis Emacs et depuis le
terminal. On dirait une liste au format python et le premier élément de
la liste n'est pas le même. Je comprends que la différence doit venir de
ceci : Avant lancer un script depuis le terminal je me mets dans le
dossier de ce script, alors qu'avant de lancer un script depuis Emacs
c'est peut-être seulement la fonction de chargement de fichier qui se
met dans ledit dossier.
print site.getusersitepackages() affiche la même chose depuis Emacs ou
le terminal :
/home/andre/.local/lib/python2.7/site-packages
Je me suis dit que cela voulait peut-être dire qu'il fallait mettre mes
modules dans site-packages, mais je préfère être sûr car je trouve
bizarre de les mettre dans un dossier caché.
De plus les sous-dossiers pointés n'existent pas, donc je suppose qu'il
faut sans doute les créer, mais là aussi j'aimerais autant être sûr. (On
ne sait jamais.)
--
lionmarron
Ce que j'ai voulu dire est que /home/andre/.local existent, alors
que /lib/python2.7/site-packages n'existent pas.