<p>在这种情况下,如果Python项目有名称空间(<code>pip install com.rocket.u2py</code>和<code>import com.rocket.u2py as u2py</code>),那就更好了</p>
<p>我认为有两个方面需要考虑:在<em>项目</em>层面,在<em>包</em>层面</p>
<p><strong>1.</strong>项目(分发包)</p>
<p>我认为将替代下载源强加于项目的最终用户是一种不好的做法。默认情况下,<em>pip</em>应该从<em>PyPI</em>下载,除非用户自己决定(通过<code> find-links</code>或类似选项,您可以在文档中指示用户这样做)</p>
<p>因为这是一个利基依赖,我想我不会把它添加到<code>install_requires</code>。我假设您项目的最终用户已经知道依赖关系,并且能够自己直接安装它</p>
<p>另外,我不认为在<em>安装时</em>可以可靠地检查是否安装了正确的依赖项,因为<code>setup.py</code>并不总是运行(覆盖<code>bdist_wheel</code>命令会有所帮助,但可能不是100%有效)</p>
<p><strong>2.</strong>包装(可进口包装)</p>
<p>我不确定是否需要采取一些具体行动。由于模块或函数不可导入,代码很可能迟早会自然失败。也许可以,也许</p>
<p>但是,检测是否安装了依赖项(而且是正确的依赖项)可能相对容易,并且可以提供更好的用户体验。检查某些特定模块或功能是否可导入。或者检查元数据(<code>import importlib_metadata; importlib_metadata.distribution('u2py').metadata['Author']</code>)</p>
<p>在申请的情况下,我会尝试尽快优雅地失败。对于库,我会尝试找到一个策略点来进行检查,并引发一个自定义异常(<code>CannotFindU2pyException</code>)</p>
<hr/>
<p>链接:</p>
<ul>
<li><a href="https://stackoverflow.com/q/58289062/11138259">Prevent pip from caching a package</a></li>
<li><a href="https://docs.python.org/3/library/importlib.metadata.html#distribution-metadata" rel="nofollow noreferrer">https://docs.python.org/3/library/importlib.metadata.html#distribution-metadata</a></li>
<li><a href="https://github.com/pypa/pip/issues/4187#issuecomment-415067034" rel="nofollow noreferrer">https://github.com/pypa/pip/issues/4187#issuecomment-415067034</a></li>
<li><a href="https://stackoverflow.com/q/57689387/11138259">Equivalent for ` find-links` in `setup.py`</a></li>
</ul>