社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

u84six • 3 年前 • 1329 次点击  

我正在创建一个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
 
1329 次点击  
文章 [ 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 环境变量(可能不适合当前问题,但有时在其他情况下有用)。