代码之家  ›  专栏  ›  技术社区  ›  Leonardo

pkg资源。ModuleNotFoundError额外资源

  •  0
  • Leonardo  · 技术社区  · 5 年前

    我有一个Python包,里面有一些模板文件。我正试图通过以下方式访问它们的路径 pkg_resources ,但我不知道如何:

    antigravity.py :

    import pkg_resources
    
    def my_function():
        print(pkg_resources.resource_listdir('antigravity', 'extras'))
        print(pkg_resources.resource_filename('antigravity', 'foo.dat'))
        print(pkg_resources.resource_filename('antigravity.extras', 'bar.dat'))
        return True
    
    if __name__ == '__main__':
        my_function()
    

    输出为:

    python antigravity\antigravity.py
    ['bar.dat', 'test.txt']
    C:\git\swt_root\new_project\antigravity\foo.dat
    Traceback (most recent call last):
      File "antigravity\antigravity.py", line 22, in <module>
        my_function()
      File "antigravity\antigravity.py", line 16, in my_function
        print(pkg_resources.resource_filename('antigravity.extras', 'bar.dat'))
      File "C:\Users\my_user\Anaconda3\lib\site-packages\pkg_resources\__init__.py", line 1128, in resource_filename
        return get_provider(package_or_requirement).get_resource_filename(
      File "C:\Users\my_user\Anaconda3\lib\site-packages\pkg_resources\__init__.py", line 345, in get_provider
        __import__(moduleOrReq)
    ModuleNotFoundError: No module named 'antigravity.extras'; 'antigravity' is not a package
    

    我不是在看书 bar.dat ,我实际上正在尝试替换以下代码:

    import pathlib
    
    script_folder = pathlib.Path(__file__).parents[0]
    bar = script_folder.joinpath('extras', 'bar.dat')
    

    我已经安装了该软件包 pip install -e . 。我在Windows 10上使用Anaconda。

    我的包结构是:

    new_project
    |   MANIFEST.in
    |   setup.py
    |
    \---antigravity
        |   antigravity.py
        |   foo.dat
        |   __init__.py
        |
        \---extras
                bar.dat
                __init__.py
    

    MANIFEST.in :

    include antigravity/foo.dat
    include antigravity/extras/bar.dat
    

    setup.py :

    import setuptools
    
    setuptools.setup(
        name="antigravity",
        version="0.0.1",
        packages=setuptools.find_packages(),
        include_package_data=True,
        test_suite="test",
        python_requires=">=3.6",
    )
    

    __init__.py :

    from .antigravity import my_function
    

    foo.dat:

    foo
    

    bar.dat:

    bar
    
    0 回复  |  直到 5 年前