conda skeleton에서 "No source urls found for XXXXX"오류가 발생했습니다.

8587 단어 Pythonconda

배경.


PyPI에 등록된 사제 포장mylibrary을 conda 포장으로 바꾸어 conda에 로그인하고 싶습니다.
아래 사이트를 참고하여 콘다 포장을 제작해 보았습니다.
https://qiita.com/iisaka51/items/5828a50744be209705d0

컨디션

  • conda 4.6.14
  • python 3.6.6
  • Xubuntu 18.04
  • 당면한 문제

    conda skeleton 명령을 실행한 후 다음 오류가 발생했습니다.
    $ 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
    
    소스 파일의 URLmylibrary이 없다고 합니다.

    잘못된 원인을 조사하다


    conda-build의 출처 확인


    "No source urls found for"에서 Google을 검색한 결과conda_build 관련 소스가 발견되었습니다.
    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없으면'Nosource urls found for'오류가 발생합니다.

    download_조사 url


    파이썬의 공식 문서download_url에는'패키지를 다운로드할 수 있는 곳'이 기재돼 있다.
    https://docs.python.org/ja/3/distutils/setupscript.html#additional-meta-data
    사제 포장mylibrarysetup.py에는 지정download_url이 없다.
    참조된 웹 사이트에서 집행conda skeleton pypi autopepa8.하지만autopepa8setup.pydownload_url없다.

    PyPI의 Download file 참조


    PyPI에서 autopepa8"Download file"를 보고 등록tar.gz했습니다.

    내가 만든 mylibrary에는 whl 서류가 있지만 tar.gz가 없다.
    PyPI에 업로드되지 않았기 때문인 것 같습니다.

    까닭


    PyPI에 업로드된 경우에만tar.gz 실행되고 그렇지 않음python setup.py bdist_wheel 때문입니다.

    해결책


    PyPI를 등록할 때 python setup.py sdist를 실행하여 sdist와 wheel을 PyPI에 업로드합니다.
    이 상태에서 실행python setup.py sdist bdist_wheel하면 오류가 사라집니다conda skeleton.

    사이트 축소판 그림

  • How to set meta.yaml inside setup.py file when it requires the tag?
  • 좋은 웹페이지 즐겨찾기