Bonjour,
Je suis étudiant en maths spé, et dans le cadre d'un projet scientifique, j'ai besoin d'utiliser le module pycan ( http://www.f-legrand.fr/scidoc/docmm...y/interpy.html ) sous Python, de préférence avec Spyder.
Sur l'un des ordinateurs Windows XP 32bits du lycée, j'ai réussi à installer le module via pycan-3.1.win32-py3.3.exe du lien précédent, puis à l'utiliser normalement.
Je souhaite le faire sur mon portable (plus pratique), sous Windows 8 64bits. J'ai donc installé WinPython 32bits 3.3 (en plus du WinPython 64 bits que j'avais déjà), et j'ai exécuté le fichier pycan-3.1.win32-py3.3.exe du lien précédent. Cet installeur ne trouve pas Python 3.3 (et plante même sur certains ordi 32 bits du lycée...). Je suis donc contraint d'installer le module manuellement, via le fichier pycan-3.1.zip .
Le fichier d'installation setup.py est le suivant :
J'ai suivi les consignes, avant de lancer l'installation dans l'invite de commande de WinPython par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 # -*- coding: utf-8 -*- from distutils.core import setup, Extension from distutils import ccompiler import numpy import os import sys numpy_include = numpy.get_include() version = ("PYTHON2",None) if sys.version_info.major==3: version = ("PYTHON3",None) # Prérequis : pthread32 (http://www.sourceware.org/pthreads-win32) # Installer la version précompilé # Ajouter le chemin de pthread\Pre-built.2\include à la variable INCLUDE ou bien modifier le chemin ci-dessous pthread_include = 'C:\PYTHON\pthreads-w32-2-9-1-release\Pre-built.2\include' # Ajouter le chemin de pthread\Pre-built.2\lib à la variable DIR ou bien modifier le chemin ci-dessous pthread_lib = 'C:\PYTHON\pthreads-w32-2-9-1-release\Pre-built.2\lib\x86' module_pysysam = Extension(name="pycan.pysysam", sources=['pysysam.c','sysamSP5Link.c','sysamPCILink.c'], include_dirs=[numpy_include,pthread_include], library_dirs=[pthread_lib], libraries=['pthreadVC2'], define_macros=[version]) # placer pthreadVC2.dll manuellement dans le build avant l'installation setup(name="pycan", version = "3.1", description= "Interface Python pour Sysam Eurosmart PCI et SP5", author = "Frederic Legrand", author_email = "fredlegr@club-internet.fr", url="www.f-legrand.fr", license="CeCILL", platforms=["MS windows"], packages=['pycan'], ext_modules=[module_pysysam])
Ce à quoi, Python déroule l'installation jusqu'à l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 C:\Program Files (x86)\WinPython-32bit-3.3.5.5\python-3.3.5>cd c:\PYTHON\pycan-3 .1 c:\PYTHON\pycan-3.1>python setup.py install
Ce n'est pas le premier message d'erreur auquel je suis confronté, mais c'est sans aucun doute celui qui va me donner le plus de fil à retordre : en allant fouiller dans spawn.py, on trouve dans la définition de _spawn_nt (lignes 57 à 75) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 File "C:\Program Files (x86)\WinPython-32bit-3.3.5.5\python-3.3.5\lib\distutil s\spawn.py", line 67, in _spawn_nt rc = os.spawnv(os.P_WAIT, executable, cmd) TypeError: spawnv() arg 2 must contain only strings
donc le problème vient de l'argument executable de la fonction spawnv, qui doit être un strings et qui d'après mon message d'erreur ne l'est pas. Mon problème est que je ne sais pas du tout comment avoir prise sur lui. Rien que le fait qu'il soit initialisé par executable=cmd[O] me laisse penser qu'il dépend d'autres objets, peut-être même d'autres fichiers ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0): executable = cmd[0] cmd = _nt_quote_args(cmd) if search_path: # either we find one or it stays the same executable = find_executable(executable) or executable log.info(' '.join([executable] + cmd[1:])) if not dry_run: # spawn for NT requires a full path to the .exe try: rc = os.spawnv(os.P_WAIT, executable, cmd) except OSError as exc: # this seems to happen when the command isn't found raise DistutilsExecError( "command '%s' failed: %s" % (cmd[0], exc.args[-1])) if rc != 0: # and this reflects the command running but failing raise DistutilsExecError( "command '%s' failed with exit status %d" % (cmd[0], rc))
Merci
(Ceci est mon premier post. J'attends vos remarques, quel qu'elles soient. En particulier :
- pour mon message d'erreur et/ou pour le fichier spawn.py, dois-je citer plus de code ?
- suis-je dans la bonne section du forum ?)
Partager