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

无法将带有子包的Python包的模块全部导入为Zip存档

  •  0
  • Nukesub  · 技术社区  · 6 月前

    main.py
    TestPackage/
    TestPackage/__init__.py
    TestPackage/PackA/PackA.py
    TestPackage/PackA/__init__.py
    
    # TestPackage/__init__.py
    import TestPackage.PackA
    
    # TestPackage/PackA/PackA.py
    def hello_from_A():
        print('Hello from A!')
    
    # TestPackage/PackA/__init__.py
    from .PackA import *
    
    # main.py
    from TestPackage.PackA import hello_from_A
    
    hello_from_A() # Hello from A!
    

    TestPackage 我可以说,把它压缩成zip档案,发送给朋友。然后他们可以这样使用它。

    main.py
    TestPackage.zip
    
    # main.py
    import sys
    sys.path.append('/path/to/zip/dir/TestPackage.zip')
    
    from TestPackage.PackA import hello_from_A
    
    hello_from_A()
    

    我创造了 TestPackage.zip 通过 cd '进入 TestPackage/ 和做

    zip ../TestPackage.zip *
    

    但问题是,当我试图跑步时 main.py 正如我上面展示的zip存档,我得到了以下错误:

    Traceback (most recent call last):
      File "main.py", line 6, in <module>
        from TestPackage.PackA import hello_from_A
    ModuleNotFoundError: No module named 'TestPackage'
    

    测试包 ?这是因为我创建zip的文件结构级别吗?有什么建议可以让它工作吗?

    1 回复  |  直到 6 月前
        1
  •  1
  •   Tuhin Shaikh    6 月前

    你可以压缩整个文件夹,而不是其中的内容。Python需要实际的 TestPackage/ 内部

    这是您需要的唯一命令:

    zip -r TestPackage.zip TestPackage/
    

    推荐文章