Sto cercando di installare un pacchetto con setuptools
tra cui console_scripts
su Windows 7. Sto cercando di cambiare il valore della mia PYTHONUSERBASE
da installare in una directory personalizzata con la bandiera --user
. Se uso backslash nel valore della PYTHONUSERBASE
, come inPython setuptools è spogliando tagli da argomenti di percorso su Windows
set PYTHONUSERBASE=C:\testing
tutto funziona bene. Tuttavia, se uso una barra, come in
set PYTHONUSERBASE=C:/testing
il pacchetto si installa nel posto giusto, ma il console_scripts
(e solo la console_scripts
) sono installati in C:testing\Scripts
. Ovviamente, quando è presente la barra diretta, setuptools
considera il percorso come percorso relativo solo per lo console_scripts
. Nel mio vero pacchetto, sto leggendo i valori da un file di configurazione, quindi preferirei non avere a che fare con la normalizzazione del separatore dei percorsi poiché ha bisogno di lavorare anche su Linux. Per il test, ho un pacchetto con la struttura
|-- setup.py
|-- foobar\
|---- __init__.py
|---- __main__.py
Il codice nel __main__.py
è
def main(): print('This is the main function')
e setup.py
assomiglia:
from setuptools import setup
setup(
name='foobar',
version='1.0.0',
packages=['foobar'],
entry_points={
'console_scripts': [
'foobar=foobar.__main__:main',
],
},
)
Perché setuptools
escludendo la prima in avanti tagliare il percorso e come posso ripararlo? Credo che questa domanda è legata al mio problema, ma io non credo che risolve: Python os.path.join on Windows
Non ho idea del perché setuptools stia facendo questo, ma potresti essere in grado di fare qualcosa nella tua funzione di configurazione come 'if 'PYTHONUSERBASE' in os.environ: os.environ ['PYTHONUSERBASE'] = os.environ [' PYTHONUSERBASE ']. Replace ('/', os.sep) ' –
@PatrickMaupin Stavo pensando a qualcosa del genere ... In realtà uso SCons per costruire il vero progetto, quindi stavo cercando di vedere se potevo gestirlo in il file di SConstruct pure. Penso che sarebbe probabilmente meglio usare 'os.path.normpath' piuttosto che sostituire esplicitamente le barre. Grazie! – darthbith
È un piano. Dimentico che normpath() lo farà perché è un comportamento specifico di Windows (su Linux, non cambierà i backslash in barre) e non userò Windows. In bocca al lupo! –