Si vous êtes un Han, vous souhaitez utiliser Python pip pour installer une roue prédéfinie qui comprend des modules C ++ sur Windows, macOS et Linux!
Faisons-le avec cibuildwheel!
https://github.com/joerick/cibuildwheel
C'est un script qui se construit dans divers environnements et versions de python. C'est génial. Vous pouvez l'intégrer dans votre propre CI de projet (travis, actions GitHub, etc.).
C'est un peu difficile à comprendre,
$ python3 -m cibuildwheel --output-dir wheelhouse
En exécutant, l'équivalent de python setup.py bdist_wheel
sera construit et exécuté pour chaque environnement de version python.
(Utilisez Docker pour Linux et macOS).
Dans cibuildwheel, Linux et macOS sont exécutés dans le conteneur Docker, donc lors de l'exécution de CI build avec Travis etc., quelque chose comme git submodule update
doit être exécuté à l'intérieur du conteneur docker.
Vous pouvez en définir dans les variables d'environnement de cibuildwheel.
https://cibuildwheel.readthedocs.io/en/latest/options/
Remarque sur le téléchargement d'un package en binaire Linux vers PyPI https://qiita.com/syoyo/items/6185380b8d9950b25561
Prière de se référer à
Avec le pipeline Azure, l'automatisation du téléchargement après la construction avec de la ficelle, etc. semble être problématique à l'heure actuelle, mais le paramètre de vispy est-il utile?
https://github.com/vispy/vispy/blob/master/azure-pipelines.yml
Pour le moment, un modèle a été proposé, mais il semble qu'il y ait des restrictions.
https://github.com/joerick/cibuildwheel/issues/229
J'ai en fait essayé de l'utiliser avec tinyobjloader, mais la documentation en ligne était difficile à comprendre et cela me paraissait plus gênant que Travis. (Ce serait bien si la description yaml pouvait être vérifiée par la syntaxe avec un éditeur en ligne)
Si vous pouvez utiliser Travis, nous vous recommandons d'utiliser travis (ou actions Github).
CopyFiles @ 2
pour copier la construction dans le dossier intermédiaire (espace disque restant après la fin du travail?)$ (Build.ArtifactStagingDirectory)
est le dossier intermédiairePublishBuildArtifacsts @ 0
- task: PublishBuildArtifacts@1
inputs:
path: $(Build.ArtifactStagingDirectory)
artifactName: tinyobjDeployWindows
En déploiement (téléchargement vers PyPI, par exemple),
Vérifiez d'abord que la tâche dépendante est terminée (dependOn
) et qu'il s'agit d'un commit de balise.
- job: deployPyPI
# Based on vispy: https://github.com/vispy/vispy/blob/master/azure-pipelines.yml
pool: {vmImage: 'Ubuntu-16.04'}
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
dependsOn:
- linux
- macos
- windows
Ensuite, utilisez DownloadBuildArtifacts
pour télécharger les artefacts du travail (en fait des dossiers).
- task: DownloadBuildArtifacts@0
inputs:
artifactName: 'tinyobjDeployWindows'
downloadPath: $(Pipeline.Workspace)
A ce moment, un dossier est créé avec ʻartifactName (
$ (Pipeline.Workspace) / tinyobjDepoloyWinwdows`), et la construction y est placée.
Pour le débogage, il semble bon de le sortir dans le journal avec ls etc. afin que vous puissiez le vérifier.
Ensuite, publiez avec de la ficelle et vous avez terminé!
# Publish to PyPI through twine
- bash: |
cd $(Pipeline.Workspace)
find .
python -m pip install --upgrade pip
pip install twine
echo tinyobjDeployLinux/python/dist/*
echo tinyobjDeployLinux/python/wheelhouse/* tinyobjDeployMacOS/python/wheelhouse/* tinyobjDeployWindows/python/wheelhouse/*
twine upload -u "__token__" --skip-existing tinyobjDeployLinux/python/dist/* tinyobjDeployLinux/python/wheelhouse/* tinyobjDeployMacOS/python/wheelhouse/* tinyobjDeployWindows/python/wheelhouse/*
env:
TWINE_PASSWORD: $(pypiToken2)
Pour le mot de passe TWINE (jeton secret), enregistrez le jeton secret avec une variable sur le site Web Azure Pipeline avec le nom pypiToken2
.
Chaque fois que je pousse et déclenche la construction, attendez environ 10 minutes, corrigez-la si une erreur se produit et attachez à nouveau la balise et pousser est gênant, donc je veux un environnement où je peux l'essayer à portée de main.
Twine token
Azure Pipeline dispose également d'une fonction de variables secrètes qui peut gérer les jetons secrets Twine (PyPi), vous pouvez donc l'utiliser.
https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#secret-variables
La variable Secret est spécifiée via la variable d'environnement dans le script de construction.
PublishPipelineArtifact
imprime uniquement les journaux qui ne contiennent même pas le message d'erreur" Une ou plusieurs erreurs se sont produites "(aucune raison d'erreur n'est affichée) et cela ne fonctionne pas.
https://stackoverflow.com/questions/58841733/how-to-debug-azure-devops-task-publishpipelineartifact-when-one-or-more-errors-o
Utilisez PublishBuildArtifacts
.
cibuildwheel, téléchargement pypi,
pytinyexr (PyEXR) utilise Travis.
https://github.com/syoyo/PyEXR
tinyobjloader utilise Azure Pipeline.
https://github.com/tinyobjloader/tinyobjloader/blob/master/azure-pipelines.yml
Py2.7(or pypy) + Windows + pybind11
Au moins pypy provoquera une erreur de construction, alors assurez-vous d'inclure pp27-win32 et pp36-win32 dans CIBW_SKIP
et ne compilez pas.
(Quelqu'un utilise-t-il pypy?)
De plus, python2.7 + C ++ 11 est fondamentalement obsolète.
https://cibuildwheel.readthedocs.io/en/stable/cpp_standards/
À moins que vous n'ayez une bonne raison d'utiliser py27, vous ne devriez pas prendre en charge python 2.7.
Recommended Posts