Py学习  »  Python

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

u84six • 3 年前 • 1378 次点击  

我正在创建一个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”的模块

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132980
 
1378 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Blckknght
Reply   •   1 楼
Blckknght    3 年前

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

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

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