gpt4 book ai didi

python - 我应该如何处理在我的 setup.py 脚本中导入第三方库?

转载 作者:行者123 更新时间:2023-12-04 12:17:10 25 4
gpt4 key购买 nike

我正在开发一个 Python 应用程序,并且正在分支一个版本。我在公司服务器上设置了一个 PyPI 服务器,并将我的包的源代码分发复制到它上面。

我检查了该软件包是否托管在服务器上,然后尝试将其安装在我的本地开发机器上。我最终得到了这个输出:

$ pip3 install --trusted-host 172.16.1.92 -i http://172.16.1.92:5001/simple/ <my-package>
Collecting <my-package>
Downloading http://172.16.1.92:5001/packages/<my-package>-0.2.0.zip
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\setup.py", line 9, in <module>
import appdirs
ModuleNotFoundError: No module named 'appdirs'

----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\

原因是我正在尝试导入第三方库 appdirs在我的 setup.py ,这是我计算 data_files 所必需的 setup() 的参数:

try:
from setuptools import setup
except ImportError:
from distutils.core import setup

import os
from collections import defaultdict

import appdirs
from <my-package>.version import __version__ as <my-package>_version

APP_NAME = '<my-app>'
APP_AUTHOR = '<company>'
SYSTEM_COMPONENT_PLUGIN_DIR = os.path.join(appdirs.user_data_dir(APP_NAME, APP_AUTHOR), 'components')

# ...

setup(
# ...
data_files=component_files,
)

但是,我没有 appdirs安装在我的本地开发机器上,我也不希望最终用户拥有它。

setup.py 中依赖这样的第三方库是否可以接受? ,如果是的话,推荐使用它们的方法是什么?有什么办法可以保证 appdirs在导入 setup.py 之前安装,或者我应该只记录 appdirs是安装我的软件包所需的软件包吗?

最佳答案

您可以使用 pip如果 import 以编程方式安装包失败:

try:
import appdirs
except ImportError:
import pip
pip.main(['install', 'appdirs'])
import appdirs

在某些情况下,您可能需要使用 importlib__import__pip.main 之后导入包或引用 PATH多变的。如果用户真的想在安装该软件包之前安装它,那么包含验证也是值得的。

我使用了很多 "Installing python module within code" 中的示例我还没有亲自尝试在 setup.py 中使用它文件,但看起来它可能是您问题的解决方案。

关于python - 我应该如何处理在我的 setup.py 脚本中导入第三方库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44308548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com