我们已经实现了许多Python脚本(按原样)
正确和正确)在模块中。这些的setup.py
包括
setup(
:
packages = ['sv.sd5ls'],
namespace_packages = ['sv'],
scripts = ['bin/sd5-ls'],
:
它显式声明包的命名空间和模块。 特别是,我们不使用 setuptools(我们只有一个或两个模块,所以我们并不真正需要 它)
这一切都可以在开发机器(使用Python 3.6.9)上正常工作 和股票操作系统setuptools 39.0.1,也在CI上,后者有Python 3.6.10 和setuptools 40.8.0,同样是库存操作系统
一位同事在运行已安装的软件包时遇到问题(事实上,所有 (其中)
$ sd5-ls --help
Traceback (most recent call last):
File "/usr/local/bin/sd5-ls", line 4, in <module>
__import__('pkg_resources').run_script('svsd5-sd5ls==6.0a2', 'sd5-ls')
File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py",
line 667, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py",
line 1471, in run_script
exec(script_code, namespace, namespace)
File "/usr/local/lib/python3.6/dist-packages/svsd5_sd5ls-6.0a2-py3.6.egg/EGG-INFO/scripts/sd5-ls",
line 3, in <module>
__requires__ = 'svsd5-sd5ls==6.0a2'
ModuleNotFoundError: No module named 'sv'
检查dist-packages
目录
drwxr-sr-x 5 root staff 4096 May 18 11:27 pkg_resources
drwxr-sr-x 6 root staff 4096 May 18 11:27 setuptools
drwxr-sr-x 2 root staff 4096 May 18 11:27 setuptools-46.4.0.dist-info
-rw-r--r-- 1 root staff 5602 Jun 23 11:27 svsd5_sd5ls-6.0a2-py3.6.egg
请注意较新版本的setuptools和pkg_resources
目录
在安装的同时创建。唯一提到的pkg_resources
在我们的代码中是sd5-ls/sv/__init__.py
,它包含行
__import__('pkg_resources').declare_namespace(__name__)
正如Python名称空间文档中所建议的那样
包括对pkg_resources/__init__.py
的调用。我猜这就是问题所在。
已安装的程序垫片(自动生成)仅为
#!/usr/bin/python3
# EASY-INSTALL-SCRIPT: 'svsd5-sd5ls==6.0a2','sd5-ls'
__requires__ = 'svsd5-sd5ls==6.0a2'
__import__('pkg_resources').run_script('svsd5-sd5ls==6.0a2', 'sd5-ls')
我认为目标{dist-packages
目录中拾取了预先存在的一个
这是不相容的
这听起来对吗?在这种情况下,删除预先存在的pkg_resources
会/应该解决问题,还是有更好的方法
事实上,我在this repository中的注释中找到了一个解决方案
相关问题 更多 >
编程相关推荐