Tag*_*agc 7 python setup.py python-packaging
我正在开发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>\
Run Code Online (Sandbox Code Playgroud)
其原因是,我试图导入第三方库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,
)
Run Code Online (Sandbox Code Playgroud)
但是,我还没有appdirs安装在本地开发机器上,也不希望最终用户安装它。
在中依赖此类第三方库是否可以接受setup.py?如果是,推荐的使用它们的方法是什么?有什么方法可以确保appdirs在导入之前进行安装setup.py,还是应该只记录appdirs安装该软件包所必需的软件包?
我在这个答案中忽略了许可问题。在真正发布之前,您肯定需要考虑这些。
在 setup.py 中依赖这样的第三方库是否可以接受
是的,这是可以接受的,但通常应该尽量减少这些,特别是如果这些模块对最终用户没有明显的用途。没有人喜欢拥有他们不需要或不使用的软件包。
建议使用它们的方法是什么?
基本上有3种选择:
引导它们(例如用于pip以编程方式安装软件包)。例如setuptools提供了一个ez_setup.py可用于引导的文件setuptools。也许可以定制下载和安装appdirs。
将它们(特别是如果它是一个小包)包含在您的项目中。例如appdirs基本上只是一个文件模块。在您的项目中很容易复制和维护。这样做时要非常小心许可问题!
当无法导入它们并让用户安装它们时,优雅地失败。例如:
try:
import appdirs
except ImportError:
raise ImportError('this package requires "appdirs" to be installed. '
'Install it first: "pip install appdirs".')
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |