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

在本地安装python包并不总是有效的

  •  0
  • u84six  · 技术社区  · 4 年前

    我正在创建一个python 3.9程序,希望在本地安装软件包。所以我的项目是这样建立的:

    __main__.py
    test.py
    requirements.txt
    lib/
        __init__.py
    

    按照我的要求。txt文件我有3行:

    colorama==0.2.2
    click==8.0.3
    pendulum==2.1.2
    

    然后我跑: python -m pip install -r requirements.txt -t ./lib 这将安装lib目录中的所有包和依赖项。

    然后我在测试的顶部导入模块。py文件:

    from lib import colorama
    from lib import click
    from lib import pendulum
    

    在做一些测试时,我发现colorama工作正常。我将在一个简单的测试中使用它: print(colorama.Fore.BLUE + "Hello, World!") .控制台中的文本为蓝色,一切正常。

    然后我尝试使用其他软件包,得到ModuleNotFoundError异常: print(pendulum.now('Europe/Paris'))

    Exception has occurred: ModuleNotFoundError - No module named 'pendulum' 这是来自它自己的一个文件。

    当我使用Click时也会发生同样的事情,但有点不同。我将得到相同的ModuleNotFound异常,但这是为了它自己对Colorama的依赖。我不认为这与我也在导入Colorama这一事实有关,因为如果我卸载,我会得到相同的错误。

    我也在python docx包中尝试过这一点。我在需求中添加了python docx==0.8.11。txt文件,然后发出与上面相同的命令,将其安装到我的本地lib目录。它似乎安装得很好。我看到了docx目录及其所有依赖项。然后我导入 from lib import docx 然后在测试中做一些简单的事情。py: doc = docx.Document()

    然后获取ModuleNotFound错误:文件“C:\Users\name\Development\python\test local package\lib\docx_ 初始化 _.py”,第3行,在(当前帧)中没有名为“docx”的模块

    有人知道我做错了什么吗?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Blckknght    4 年前

    当你把这些库放进你的 lib 文件夹并按您的方式导入它们,您正在更改它们的包名。不再是了 colorama 顶级套餐,现在 lib.colorama .有些库可能对此没有问题,但对于其他库,它们希望能够使用正常名称导入自己的代码。如果 colorama.some_submodule 试图 import colorama ,它会失败。

    重要的是要意识到 from lib import colorama 不会改变你的生活方式 科洛拉玛 随处可见。它只会更改本地名称空间。包裹还在 lib。科洛拉玛 ,我们刚把它和名字绑在一起 科洛拉玛 在当前模块中。

    正如JonSG在评论中所建议的,更好的解决方案是 解放党 将文件夹放入Python搜索路径中,以便 进口色拉马 将找到具有正常名称的包。修改 sys.path 这是一种方法,另一种是 PYTHONPATH 环境变量(可能不适合当前问题,但有时在其他情况下有用)。

    推荐文章