[pycan] mauvais argument dans spawnv
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 :
Code:
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]) |
J'ai suivi les consignes, avant de lancer l'installation dans l'invite de commande de WinPython par :
Code:
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 à quoi, Python déroule l'installation jusqu'à l'erreur :
Code:
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 |
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:
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)) |
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 ?
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 ?)