如何在我自己的Python包中嵌入一个Python库?
例如,取Requests library。 我怎么能将它集成到我自己的包中,目的是允许我在不同的机器上运行我的应用程序,而不是在每个机器上实际安装Requests,而是将它放在与我的包相同的文件夹中?
这甚至可能吗?
答案 0 :(得分:30)
如果它是一个纯python库(没有编译过的模块),您只需将库放在项目的一个文件夹中,然后将该文件夹添加到模块搜索路径中。这是一个示例项目:
|- application.py |- lib | `- ... |- docs | `- ... `- vendor |- requests | |- __init__.py | `- ... `- other libraries...
此示例中的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
答案 1 :(得分:4)
如果您只需要运行您的应用程序,pyinstaller包装是更好的选择。
它将创建一个包含所需内容的捆绑包,包括Python,以避免依赖于您正在运行的系统。
答案 2 :(得分:2)
虽然不是您问题的直接答案。您可能需要查看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
也会自动安装请求。
答案 3 :(得分:0)
以上所有答案都是正确的,但是最好的解决方案是创建一个标准程序包。
您可以参考以下链接: https://packaging.python.org/tutorials/packaging-projects/