# [ebuild] problème avec un programme python (résolu)

## 341438

Salut à tous,

j'essaie de créer un ebuild pour un programme python, malheureusement sans succès. Je ne comprends pas le problème, donc je ne sais pas dans quelle direction chercher. Pour faire court: j'installe dev-python/pafy et net-misc/mps-youtube. Ils se trouvent sur mon overlay, à savoir tristelune. Vous pouvez trouver les ebuilds ici: https://github.com/tristelune1/tristelune-overlay. 

Ca compile, sans problème, mais au démarrage de mps-youtube avec la commande mpsyt:

```

% mpsyt 

Traceback (most recent call last):

  File "/usr/lib/python-exec/python3.4/mpsyt", line 5, in <module>

    from pkg_resources import load_entry_point

  File "/usr/lib64/python3.4/site-packages/pkg_resources/__init__.py", line 3138, in <module>

    @_call_aside

  File "/usr/lib64/python3.4/site-packages/pkg_resources/__init__.py", line 3124, in _call_aside

    f(*args, **kwargs)

  File "/usr/lib64/python3.4/site-packages/pkg_resources/__init__.py", line 3151, in _initialize_master_working_set

    working_set = WorkingSet._build_master()

  File "/usr/lib64/python3.4/site-packages/pkg_resources/__init__.py", line 661, in _build_master

    ws.require(__requires__)

  File "/usr/lib64/python3.4/site-packages/pkg_resources/__init__.py", line 962, in require

    needed = self.resolve(parse_requirements(requirements))

  File "/usr/lib64/python3.4/site-packages/pkg_resources/__init__.py", line 849, in resolve

    raise DistributionNotFound(req, requirers)

pkg_resources.DistributionNotFound: The 'youtube-dl' distribution was not found and is required by pafy

```

youtube-dl est installé sur mon système:

```

% emerge --search youtube-dl                                                                                    

[ Results for search key : youtube-dl ]

Searching...

*  net-misc/youtube-dl

      Latest version available: 2016.01.01

      Latest version installed: 2015.11.27.1

      Size of files: 1,831 KiB

      Homepage:      https://rg3.github.com/youtube-dl/

      Description:   Download videos from YouTube.com (and more sites...)

      License:       public-domain

```

avec python un 

```

import youtube_dl

```

fonctionne. J'ai plusieurs versions de python installées:

```

% eselect python list

Available Python interpreters:

  [1]   python2.7

  [2]   python3.4 *

  [3]   python3.5

```

Donc la version utilisée est la 3.4. J'ai bricolé dans tous les sens avec les variables PYTHON_TARGETS et PYTHON_SINGLE_TARGET, donc il est possible que le problème vienne de là. Ce qui est sûr c'est que youtube-dl est compilé pour python 3.4. Voici un extrait du contenu de youtube-dl:

```

[01m/usr[39;49;00m

[01m/usr/bin[39;49;00m

/usr/bin/youtube-dl

[01m/usr/lib64[39;49;00m

[01m/usr/lib64/python3.4[39;49;00m

[01m/usr/lib64/python3.4/site-packages[39;49;00m

[01m/usr/lib64/python3.4/site-packages/youtube_dl[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/YoutubeDL.py

/usr/lib64/python3.4/site-packages/youtube_dl/__init__.py

/usr/lib64/python3.4/site-packages/youtube_dl/__main__.py

[01m/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/YoutubeDL.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/YoutubeDL.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/__init__.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/__init__.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/__main__.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/__main__.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/aes.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/aes.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/cache.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/cache.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/compat.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/compat.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/jsinterp.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/jsinterp.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/options.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/options.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/swfinterp.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/swfinterp.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/update.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/update.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/utils.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/utils.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/version.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/__pycache__/version.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/aes.py

/usr/lib64/python3.4/site-packages/youtube_dl/cache.py

/usr/lib64/python3.4/site-packages/youtube_dl/compat.py

[01m/usr/lib64/python3.4/site-packages/youtube_dl/downloader[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__init__.py

[01m/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/__init__.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/__init__.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/common.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/common.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/dash.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/dash.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/external.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/external.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/f4m.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/f4m.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/fragment.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/fragment.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/hls.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/hls.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/http.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/http.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/rtmp.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/rtmp.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/rtsp.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/__pycache__/rtsp.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/common.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/dash.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/external.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/f4m.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/fragment.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/hls.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/http.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/rtmp.py

/usr/lib64/python3.4/site-packages/youtube_dl/downloader/rtsp.py

[01m/usr/lib64/python3.4/site-packages/youtube_dl/extractor[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__init__.py

[01m/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/__init__.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/__init__.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/abc.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/abc.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/abc7news.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/abc7news.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/academicearth.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/academicearth.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/addanime.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/__pycache__/addanime.cpython-34.pyo

.

.

.

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/youtube.py

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/zapiks.py

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/zdf.py

/usr/lib64/python3.4/site-packages/youtube_dl/extractor/zingmp3.py

/usr/lib64/python3.4/site-packages/youtube_dl/jsinterp.py

/usr/lib64/python3.4/site-packages/youtube_dl/options.py

[01m/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__init__.py

[01m/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__[39;49;00m

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/__init__.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/__init__.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/common.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/common.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/embedthumbnail.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/embedthumbnail.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/execafterdownload.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/execafterdownload.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/ffmpeg.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/ffmpeg.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/metadatafromtitle.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/metadatafromtitle.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/xattrpp.cpython-34.pyc

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/__pycache__/xattrpp.cpython-34.pyo

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/common.py

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/embedthumbnail.py

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/execafterdownload.py

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/ffmpeg.py

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/metadatafromtitle.py

/usr/lib64/python3.4/site-packages/youtube_dl/postprocessor/xattrpp.py

/usr/lib64/python3.4/site-packages/youtube_dl/swfinterp.py

/usr/lib64/python3.4/site-packages/youtube_dl/update.py

/usr/lib64/python3.4/site-packages/youtube_dl/utils.py

/usr/lib64/python3.4/site-packages/youtube_dl/version.py

[01m/usr/share[39;49;00m

[01m/usr/share/bash-completion[39;49;00m

[01m/usr/share/bash-completion/completions[39;49;00m

/usr/share/bash-completion/completions/youtube-dl

[01m/usr/share/doc[39;49;00m

[01m/usr/share/doc/youtube-dl-2015.11.27.1[39;49;00m

/usr/share/doc/youtube-dl-2015.11.27.1/README.txt.bz2

[01m/usr/share/man[39;49;00m

[01m/usr/share/man/man1[39;49;00m

/usr/share/man/man1/youtube-dl.1.bz2

```

Qu'est-ce qui peut coincer ? J'ai vu que pour Archlinux par exemple, la commande pour créer le paquet est:

```

python setup.py install --root="$pkgdir" --optimize=1

```

J'ai bien essayé dans le ebuild:

```

python_install() {

   distutils-r1_python_install --root="${D}"

}

```

Mais le résultat n'a pas été convaincant!Last edited by 341438 on Sun Mar 20, 2016 4:29 pm; edited 1 time in total

----------

## 341438

Je progresse. Je peux donc importer le module youtube_dl avec python. Avec l'interpréteur python, si je fais:

```
>>> pkg_resources.get_distribution('numpy')

numpy 1.10.2 (/usr/lib64/python2.7/site-packages)

```

Par contre pour youtube_dl:

```

>>> pkg_resources.get_distribution('youtube_dl')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/usr/lib64/python2.7/site-packages/pkg_resources/__init__.py", line 561, in get_distribution

    dist = get_provider(dist)

  File "/usr/lib64/python2.7/site-packages/pkg_resources/__init__.py", line 441, in get_provider

    return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]

  File "/usr/lib64/python2.7/site-packages/pkg_resources/__init__.py", line 962, in require

    needed = self.resolve(parse_requirements(requirements))

  File "/usr/lib64/python2.7/site-packages/pkg_resources/__init__.py", line 849, in resolve

    raise DistributionNotFound(req, requirers)

pkg_resources.DistributionNotFound: The 'youtube-dl' distribution was not found and is required by the application

```

Le même problème se produit par exemple pour le module yaml: je peux l'importer, mais pas utiliser la méthode de pkg_resources. Le point commun est la présence ou non d'un fichier .egg-info. Pour numpy il existe un fichier numpy-1.10.2-py2.7.egg-info et pas pour youtube-dl. Sur un autre ordinateur Archlinux est installé et là le programme mpsyt fonctionne. Mais un dossier youtube_dl-2016.1.9-py3.5.egg-info existe. Donc la question est de savoir maintenant comment c'est produit. Mes connaissances se limitent à savoir que c'est lié à setuptools. Je ne vois pas de use flag qui pourrait m'aider pour youtube-dl.

----------

## netfab

Salut,

Ce qui suit ne va pas résoudre ton problème, mais je pense qu'il y a déjà un souci avec l'ebuild de dev-python/pafy-0.4.3.

En effet, ici sur un système stable, si je fais un :

```

# emerge -pv1 pafy

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild  N     ] net-misc/youtube-dl-2016.01.01::gentoo  USE="-offensive {-test}" PYTHON_SINGLE_TARGET="python2_7 -python3_3 -python3_4 (-python3_5)" PYTHON_TARGETS="python2_7 python3_4 -python3_3 (-python3_5)" 0 KiB

[ebuild  N    ~] dev-python/pafy-0.4.3::perso  PYTHON_TARGETS="python3_4" 0 KiB

```

On s'aperçoit que net-misc/youtube-dl va être uniquement construit pour python-2.7 (PYTHON_SINGLE_TARGET="python2_7 ...))

C'est normal, puisque l'ebuild de youtube-dl définit la variable DISTUTILS_SINGLE_IMPL=true, ce qui signifie que ce paquet ne peut-être construit que pour une et une seule implémentation de python à la fois.

Or, d'après l'eclass python-single-r1 :

 *Quote:*   

> 
> 
> # Please note that packages support multiple Python implementations
> 
> # (using python-r1 eclass) can not depend on packages not supporting
> ...

 

Ce qui pour moi, signifie aussi que, étant donné que pafy ne fonctionne qu'avec python-3.4, il faudrait forcer youtube-dl pour python-3.4, de la façon suivante :

```

--- pafy-0.4.3.ebuild.old   2016-01-12 13:40:54.109506299 +0100

+++ pafy-0.4.3.ebuild   2016-01-12 19:07:20.000000000 +0100

@@ -4,6 +4,7 @@

 

 EAPI=5

 PYTHON_COMPAT=( python3_4 )

+DISTUTILS_SINGLE_IMPL=true

 inherit distutils-r1

 

 DESCRIPTION="Python library to download YouTube content and retrieve metadata"

@@ -15,8 +16,8 @@

 KEYWORDS="~x86 ~amd64"

 IUSE=""

 

-DEPEND="dev-lang/python

-      net-misc/youtube-dl"

+DEPEND="${PYTHON_DEPS}

+   net-misc/youtube-dl[${PYTHON_USEDEP}]"

 RDEPEND="${DEPEND}"

 

 python_install() {

```

Tu remarqueras que dans ce patch j'ai retiré la dépendance sur dev-lang/python, je ne pense pas qu'il faille dépendre directement sur python, je pense qu'il vaut mieux utiliser ${PYTHON_DEPS}.

De cette façon, lorsque je fais un :

```

# emerge -pv1 pafy

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild  N     ] net-misc/youtube-dl-2016.01.01::gentoo  USE="-offensive {-test}" PYTHON_SINGLE_TARGET="python3_4 -python2_7 -python3_3 (-python3_5)" PYTHON_TARGETS="python2_7 python3_4 -python3_3 (-python3_5)" 0 KiB

[ebuild  N    ~] dev-python/pafy-0.4.3::perso  PYTHON_TARGETS="python3_4" 0 KiB

Total: 2 packages (2 new), Size of downloads: 0 KiB

The following USE changes are necessary to proceed:

 (see "package.use" in the portage(5) man page for more details)

# required by dev-python/pafy-0.4.3::perso

# required by pafy (argument)

>=net-misc/youtube-dl-2016.01.01 -python_single_target_python2_7 python_single_target_python3_4

```

emerge me propose de construire youtube-dl pour python-3.4 (la bonne version pour pafy !), et me donne la ligne à ajouter dans ma configuration pour y parvenir.

Sinon, une fois mps-youtube installé, j'obtiens la même traceback que toi :

```

pkg_resources.DistributionNotFound: The 'youtube-dl' distribution was not found and is required by pafy

```

Mais je n'ai pas encore essayé de comprendre ce qui peut bien se passer.

----------

## 341438

Finalement, le problème est à présent réglé. Je pense que c'est largement dû à la libraire pafy 0.5.0. l'ebuild est sur mon overlay (tristelune), 

si quelqu'un veut essayer cela fonctionne. Merci pour le coup de main!

----------

