如何在我自己的 Python 包中“嵌入”一个 Python 库?
以Requests 库为例。我如何将它集成到我自己的包中,目标是允许我在不同的机器上运行我的应用程序,而无需在每一台机器上实际安装 Requests,而是将它与我的包放在同一个文件夹中?
这甚至可能吗?
如何在我自己的 Python 包中“嵌入”一个 Python 库?
以Requests 库为例。我如何将它集成到我自己的包中,目标是允许我在不同的机器上运行我的应用程序,而无需在每一台机器上实际安装 Requests,而是将它与我的包放在同一个文件夹中?
这甚至可能吗?
如果它是一个纯 python 库(没有编译模块),您可以简单地将库放在项目中的文件夹中,然后将该文件夹添加到模块搜索路径中。这是一个示例项目:
|- 应用程序.py |- 库 | `- ... |- 文档 | `- ... `- 供应商 |- 请求 | |- __init__.py | `- ... `- 其他库...
此示例中的vendor
文件夹包含所有第三方模块。该文件application.py
将包含以下内容:
import os
import sys
# Add vendor directory to module search path
parent_dir = os.path.abspath(os.path.dirname(__file__))
vendor_dir = os.path.join(parent_dir, 'vendor')
sys.path.append(vendor_dir)
# Now you can import any library located in the "vendor" folder!
import requests
正如seeafish在评论中指出的那样,您可以将软件包直接安装到供应商目录中:
pip install <pkg_name> -t /path/to/vendor_dir
如果你只需要运行你的应用程序可能pyinstaller打包是一个更好的选择。
它将创建一个包含所有需要的包,包括 Python,以避免对您正在运行的系统的依赖。
虽然不是直接回答您的问题。你可能想看看setuptools
。通过利用这种包分发机制,您可以描述您的依赖关系,并且当您的包被“安装”时,所有依赖包也将被安装。您将在包结构的顶部创建一个setup.py
文件,类似于:
from setuptools import setup, find_packages
setup(
name = 'MyPackage',
version = '1.0',
packages = find_packages(),
...
install_requires = ['requests'],
...
)
这将由用户安装
python setup.py install
请求也会自动安装。
以上所有答案都是正确的,但最好的解决方案是创建一个标准包。
你可以参考这个链接: https ://packaging.python.org/tutorials/packaging-projects/