Sto cercando di integrare un progetto Project A
creato da un collega in un altro progetto python. Ora, questo collega non ha utilizzato le importazioni relative nel suo codice, ma invece fattoEliminare oggetti python con un percorso modulo modificato
from packageA.moduleA import ClassA
from packageA.moduleA import ClassB
e di conseguenza in salamoia le classi con cPickle
. Per comodità vorrei nascondere il pacchetto che il suo (Project A
) ha costruito all'interno del mio progetto. Ciò tuttavia modifica il percorso delle classi definite in packageA
. Nessun problema, mi limiterò a ridefinire l'importazione utilizzando
from ..packageA.moduleA import ClassA
from ..packageA.moduleA import ClassB
ma ora il decapaggio delle Nazioni Unite le classi non riesce con il seguente messaggio
with open(fname) as infile: self.clzA = cPickle.load(infile)
ImportError: No module named packageA.moduleA
Allora perché non cPickle
non pare vedere i defs modulo. Devo aggiungere la radice di packageA
al percorso di sistema? È questo il modo corretto per risolvere il problema?
Il file cPickled
simile a
ccopy_reg
_reconstructor
p1
(cpackageA.moduleA
ClassA
p2
c__builtin__
object
p3
NtRp4
La gerarchia vecchio progetto è del tipo
packageA/
__init__.py
moduleA.py
moduleB.py
packageB/
__init__.py
moduleC.py
moduleD.py
mi piacerebbe mettere tutto questo in un WrapperPackage
MyPackage/
.. __init__.py
.. myModuleX.py
.. myModuleY.py
WrapperPackage/
.. __init__.py
.. packageA/
.. __init__.py
.. moduleA.py
.. moduleB.py
.. packageB/
.. __init__.py
.. moduleC.py
.. moduleD.py
mi sono imbattuto in questo problema di scrittura di un plug-in per KRunner. Il motore di script usato da Plasma utilizzava un hook di percorso per creare un pacchetto falso dove era il mio codice. Purtroppo non sono riuscito a trovare alcun modo per risolvere questo. L'unica cosa che potevo fare era rimuovere manualmente il loro hook di percorso, cancellare le cache 'sys' e reimportare tutto. Ma se si hanno alcuni dati in pickled, è necessario annullarlo con lo stesso nome di classe (il che significa che è necessario mantenere 'da packageA.moduleA import ClassA'). Nota che, una volta deselezionati, puoi reiscriverli utilizzando il nome corretto. – Bakuriu