【发布时间】:2017-11-02 15:53:23
【问题描述】:
我正在开发一个 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>\
原因是我试图在我的setup.py 中导入一个第三方库appdirs,这是我计算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 中依赖这样的第三方库是否可以接受,如果可以,使用它们的推荐方法是什么?有没有办法可以确保在 setup.py 中导入 appdirs 之前安装它,或者我应该只记录 appdirs 是安装我的包所需的包?
【问题讨论】:
-
您是否尝试过使用
setup_requires?见pip.readthedocs.io/en/1.4.1/… -
@PeterBrittain 有没有关于如何使用它的示例?我是否应该进行两次
setup()调用,一次在setup.py的顶部附近只有setup_requires=['appdirs'],而我已经在底部? -
这并不常见...您可以在stackoverflow.com/questions/37471313/setup-requires-with-cython 中找到一个简单的示例。这开始显示python.org/dev/peps/pep-0518 中提到的各种箍,它突出了使用 pip 执行此操作的另一种选择,应该很快就会可用。
标签: python setup.py python-packaging