我正在开发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_filessetup()参数是必需的:

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,还是应该只记录ojit_code是安装我的软件包所必需的软件包?

最佳答案

我忽略了此答案中的许可问题。在真正发布之前,您绝对需要考虑这些因素。



是的,这是可以接受的,但是通常应将其最小化,特别是如果这些模块对于最终用户没有明显的用途。没有人喜欢拥有不需要或不使用的软件包。



基本上有3种选择:

  • 引导它们(例如,使用pip以编程方式安装软件包)。例如 setuptools provides an ez_setup.py file可用于引导setuptools。也许可以对其进行自定义以下载和安装appdirs
  • 在您的项目中包括它们(尤其是如果是一个小包装)。例如,appdirs基本上只是一个文件模块。在您的项目中非常容易复制和维护。当您这样做时,请务必小心许可问题!
  • 无法导入它们并让用户安装它们时,它会正常失败。例如:
    try:
        import appdirs
    except ImportError:
        raise ImportError('this package requires "appdirs" to be installed. '
                          'Install it first: "pip install appdirs".')
    
  • 关于python - 我应该如何在setup.py脚本中处理导入第三方库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44308548/

    10-11 16:36