conda skeletonで`No source urls found for XXXXX`というエラーが出る場合

# 背景
PyPIに登録した自作パッケージ`mylibrary`を、condaパッケージに変換して、condaに登録したいです。

以下のサイトを参考にして、condaパッケージの作成を試みました。
https://qiita.com/iisaka51/items/5828a50744be209705d0

## 環境
* conda 4.6.14
* python 3.6.6
* Xubuntu 18.04


# 遭遇した問題
`conda skeleton`コマンドを実行したら、以下のエラーが発生しました。


```console
$ conda skeleton pypi mylibrary

Leaving build/test directories:
  Work:
 /home/vagrant/miniconda3/conda-bld/skeleton_1560081893777/work 
  Test:
 /home/vagrant/miniconda3/conda-bld/skeleton_1560081893777/test_tmp 
Leaving build/test environments:
  Test:
source activate  /home/vagrant/miniconda3/conda-bld/skeleton_1560081893777/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho 
  Build:
source activate  /home/vagrant/miniconda3/conda-bld/skeleton_1560081893777/_build_env 

Error: No source urls found for mylibrary
```

`mylibrary`のソースのURLがないそうです。


# エラーの原因を調査

## conda-buildのソースを確認
"No source urls found for"でGoogle検索したところ、`conda_build`関係のソースが見つかりました。


```python:conda-build/conda_build/skeletons/pypi.py
    data = pypi_data['info'] if not is_url else {}

    # PyPI will typically have several downloads (source, wheels) for one
    # package/version.
    urls = [url for url in pypi_data['releases'][version]] if not is_url else [package]

    if not is_url and not all_urls:
        # Try to find source urls
        urls = [url for url in urls if url['packagetype'] == 'sdist']

    if not urls:
        # Try harder for a download location
        if data.get('download_url'):
            urls = [defaultdict(str, {'url': data['download_url']})]
            if not urls[0]['url']:
                # The package doesn't have a url, or maybe it only has a wheel.
                sys.exit("Error: Could not build recipe for %s. "
                    "Could not find any valid urls." % package)
            U = parse_url(urls[0]['url'])
            if not U.path:
                sys.exit("Error: Could not parse url for %s: %s" %
                    (package, U))
            urls[0]['filename'] = U.path.rsplit('/')[-1]
            fragment = U.fragment or ''
            digest = fragment.split("=")
        else:
            sys.exit("Error: No source urls found for %s" % package)
```

PyPIから取得した情報に`download_url`がないと、"No source urls found for"というエラーが出るようです。


## download_urlを調査
Pythonの公式ドキュメントには、`download_url`は「パッケージをダウンロードできる場所」と記載されています。
https://docs.python.org/ja/3/distutils/setupscript.html#additional-meta-data

自作パッケージ`mylibrary`の`setup.py`には、`download_url`を指定していませんでした。
[参考にしていたサイト](https://qiita.com/iisaka51/items/5828a50744be209705d0)では、`conda skeleton pypi autopepa8`を実行しています。しかし`autopepa8`の`setup.py`にも`download_url`はありませんでした。

## PyPIの"Download file"参照
PyPIで、`autopepa8`の["Download file"](https://pypi.org/project/autopep8/#files)を見てみると、`tar.gz`が登録されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37903/a8b8ecbf-68c8-671d-3522-c0a504f714b9.png)

私が作成した`mylibrary`には`whl`ファイルはありますが、`tar.gz`はありません。
どうやら、`tar.gz`がPyPIにアップロードされていないことが、原因のようです。

# 原因
PyPIにアップロードする際`python setup.py bdist_wheel`だけを実行していて、`python setup.py sdist`を実行していないことが原因でした。

# 解決方法
PyPIに登録する際は、`python setup.py sdist bdist_wheel`を実行して、sdistとwheelをPyPIにアップロードするようにしました。
その状態で`conda skeleton`を実行したら、エラーはなくなり`meta.yaml`が生成されました。

# 参考サイト

* [How to set `download_url` inside setup.py file when it requires the tag?](https://github.com/pypa/setuptools_scm/issues/95)