Ho un progetto che compila con estensioni C su Linux, ma senza su Windows. Quando ho generato per la prima volta i file wheel su Windows con python setup.py bdist_wheel
, sono diventati universali e non è stato possibile caricarli su PyPI poiché queste ruote universali sono preferite da pip
per l'installazione sui caricamenti .tar.gz
(il risultato da python setup.py sdist
).'pip setup.py bdist_wheel' non costruisce più ruote non pure forzate
Il trucco intorno a questo è stato quello di specificare nel setup.py
:
Distribution.is_pure = lambda *args: False
o sottoclasse Distribution
:
class BinaryDistribution(Distribution):
def is_pure(self):
return False
e chiamando setup()
in setup.py con l'argomento chiave in più distclass=BinaryDistribution,
.
Questo ha funzionato perfettamente sulla mia macchina virtuale con Windows XP 64 che ha versioni a 32 e 64 bit di Python 2.6/2.7/3.3/3.4 e Pypy installato proprio per questo scopo. Un semplice file batch mi dà:
dist/pkg-1.0-cp26-none-win32.whl
dist/pkg-1.0-cp26-none-win_amd64.whl
dist/pkg-1.0-cp27-none-win32.whl
dist/pkg-1.0-cp27-none-win_amd64.whl
dist/pkg-1.0-cp33-none-win32.whl
dist/pkg-1.0-cp33-none-win_amd64.whl
dist/pkg-1.0-cp34-none-win32.whl
dist/pkg-1.0-cp34-none-win_amd64.whl
e il pacchetto appropriato ottiene downloade e installato da pip
quando si esegue pip
su Windows e quando si esegue pip
su Linux si ottiene il
pkg-1.0.tar.gz
che comprende la C fonti che vengono compilate durante l'installazione.
Il problema è iniziato con il fatto che non dispongo di un computer con licenza Windows 7 di riserva in cui posso installare Python 3.5 (non viene installato su EOL XP). Così ho studiato Appveyor e creato appveyor.yml
:
environment:
matrix:
- PYTHON: C:\Python27
- PYTHON: C:\Python33
- PYTHON: C:\Python34
- PYTHON: C:\Python35
- PYTHON: C:\Python27-x64
- PYTHON: C:\Python33-x64
DISTUTILS_USE_SDK: '1'
- PYTHON: 'C:\Python34-x64'
DISTUTILS_USE_SDK: '1'
- PYTHON: 'C:\Python35-x64'
install:
- |
%PYTHON%\python.exe -m pip install --upgrade pip
%PYTHON%\python.exe -m pip install wheel
build: off
test_script:
- echo Skipped for now
after_test:
- |
%PYTHON%\python.exe setup.py bdist_wheel
artifacts:
- path: dist\*
Con la stessa fonte il risultato di quanto sopra otto chiamate al python setup.py bdist_wheel
sono:
pkg-1.0-py2-none-any.whl
pkg-1.0-py3-none-any.whl
E se si carica questi per PyPI, Linux li preferisce over il .tar.gz
che porta alla non inclusione del codice di estensione C.
cosa provoca questo, e come posso usare Appveyor per costruire i miei .whl
file (o almeno quelli per Python 3.5?
ho encoutered lo stesso identico problema solo ora, con Windows 7 e python 3.5. Tornando alle ruote 0.24.0 risolve davvero il problema. Ho provato a cercare quando sono stati rilasciati i dischi 0.25+ ma non riesci a trovare il tag sul repository di bitbucket. Qualche idea ? – Overdrivr
@Overdrivr Questo era il 2015-09-17. tali informazioni possono essere facilmente trovate guardando la ruota su [pypi] (https://pypi.python.org/pypi/wheel/0.25.0) (la ricerca su pypi stesso ti mostrerà alcune versioni precedenti o cambierà la fine di l'URL da 0.26.0 stesso) – Anthon
@Overdrivr guarda la mia risposta aggiornata, con 0.28 e l'opzione '--plat-name' ora puoi anche generare i file' .whl' su una macchina Linux se sono puri. – Anthon