Come posso utilizzare pywin32 con un virtualenv senza dover includere cartella site-packages del ambiente host?
-
11-09-2019 - |
Domanda
Sto lavorando con PyInstaller sotto Python 2.6, che è solo in parte sostenuto a causa del disordine MS hanno creato con la loro nonense manifesta che ora colpisce Python data la MSVC8 compilato.
Il problema è che il sostegno embedding manifesto si basa sulla pywin32 estensioni al fine di costruire che è un dolore perché senza compresa la cartella site-packages del padrone di casa quando creo il virtualenv (sconfigge un pò il punto in un ambiente di compilazione) non riesco a trovare un modo per installare le estensioni necessarie in modo che siano accessibili a PyInstaller.
Qualcuno ha trovato una soluzione a questo problema?
Soluzione 3
OK, bene da quando ho dovuto trovare una via d'uscita ho improvvisato. Ho internamente creato un repository git con una versione hacked-insieme di pywin32 che installerà entro un virtualenv utilizzando lo script setup.py
standard. Ci sono voluti un sacco di armeggiare per farlo funzionare a destra ma sono riuscito a farlo per caricare e il codice dipendente ora funziona come ho bisogno di. Se le persone si sentono questo sarebbe di beneficio per la comunità prega di inviare un commento. Se ho abbastanza cercherò di mettere qualcosa sul mio conto github
Altri suggerimenti
http://old.nabble.com/ finestre: -virtualenv-e-pywin32 - td27658201.html (ora un link morto), che ha offerto la seguente soluzione:
- http://sourceforge.net/projects/pywin32/files/ per la URL del exe che si desidera
- Attiva il tuo virtualenv
- Esegui
easy_install http://PATH.TO/EXE/DOWNLOAD
Questo funziona con le versioni moderne di setuptools (circa febbraio 2014, riportati da tovmeod nei commenti).
Se si sta utilizzando una vecchia versione di setuptools (o distribuirlo fuse nuovamente dentro setuptools), è possibile ottenere questo messaggio di errore:
errore: C: \ Users \ bla \ AppData \ Local \ Temp \ easy_install-ibkzv7 \ pywin32-214.win32-py2.6.exe non è un valido distutils di Windows exe
In questo caso:
- Scarica il file EXE da soli
- Attiva il tuo virtualenv
- Esegui
easy_install DOWNLOADED_FILE.exe
Io invece spera provato "pip install" piuttosto che "easy_install", ma questo non ha funzionato, e probabilmente mai lo (citazione necessaria).
Infine, ho trovato ma non ho ancora testato una soluzione a http://www.mail-archive.com/python-list@python.org/msg272040.html che è:
Risolto questo copiando il file pywin32.pth nelle mie virtualenv site-packages e la modifica del file per puntare al percorso.
Se le altre opzioni non funzionano per voi, forse questa volontà?
Per Python 2.7 o uso 3.x pypiwin32 .
pip install pypiwin32
Questo potrebbe essere stato migliorato rispetto risposta precedente, dal momento che ho installato con successo su pywin32 sandbox su più macchine senza "hack" specifiche:
$ virtualenv sandbox
$ sandbox\scripts\activate
(sandbox) $ git clone https://github.com/Travis-Sun/pywin32.git
(sandbox) $ cd pywin32
(sandbox) $ python setup.py install
Testato con seguente ambiente:
- Windows 7
- git
- pitone 2.7.10 con virtualenv
- VS2008. Può anche funzionare (ma non ho ancora testato) con http://www.microsoft.com/en-us/download /details.aspx?id=44266
Modifica: Gratta e questo, per ora, sembra essere alcuni problemi con l'installazione ancora ...
mi sono un po 'stanco di tutta la situazione, e appena creato un set di ruote convertiti ( "ruota convertito
https://tr00st.co.uk/python/wheel/pywin32/
L'installazione può essere fatto facilmente utilizzando pip e indicando il pacchetto corrisponde alla tua versione e l'architettura. Ad esempio, per Python 3.5 / amd64:
https: // tr00st. co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_amd64.whl
Caveat: Il processo --upgrade attualmente non riesce, come la procedura di disinstallazione non è in grado di pulire dopo se stessa (Accesso negato durante la pulizia di win32api.pyd) - questo è solo quando si rimuove la directory temporanea, che può essere cancellati manualmente. Il modo più semplice per aggirare questo è disinstallare e reinstallare, invece di migliorare, quindi eliminare manualmente la cartella temporanea.