我看过类似的问题,但没有回答的运气,我有以下结构
??? README.rst
??? setup.py
??? my_package
??? conf.py
??? sub_module1
? ??? __init__.py
? ??? some_code.py
??? sub_module2
? ??? __init__.py
? ??? some_other_code.py
??? some_main_code.py
??? __init__.py
Run Code Online (Sandbox Code Playgroud)
我setup.py看起来像
..
setup(name=..
...
packages=find_packages('my_package')
Run Code Online (Sandbox Code Playgroud)
安装时出现以下错误
ERROR: Command errored out with exit status 1:
command: /some_path/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-f7hcw6xa/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-f7hcw6xa/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-req-build-f7hcw6xa/pip-egg-info
cwd: /tmp/pip-req-build-f7hcw6xa/
Complete output (8 lines):
running egg_info
creating /tmp/pip-req-build-f7hcw6xa/pip-egg-info/my_package.egg-info
writing /tmp/pip-req-build-f7hcw6xa/pip-egg-info/my_package.egg-info/PKG-INFO
writing dependency_links to /tmp/pip-req-build-f7hcw6xa/pip-egg-info/my_package.egg-info/dependency_links.txt
writing requirements to /tmp/pip-req-build-f7hcw6xa/pip-egg-info/my_package.egg-info/requires.txt
writing top-level names to /tmp/pip-req-build-f7hcw6xa/pip-egg-info/my_package.egg-info/top_level.txt
writing manifest file '/tmp/pip-req-build-f7hcw6xa/pip-egg-info/my_package.egg-info/SOURCES.txt'
error: package directory 'sub_module1' does not exist
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
Run Code Online (Sandbox Code Playgroud)
如果sub_module1在那里,并且其中有一个init .py 文件 - 为什么安装不能识别它?
编辑:感谢 sinoroc指出当然不止一个解决此问题的方法。
解决方案#1
错误消息告诉您解释器认为您有一个名为“sub_module1”的包。由于这显然是一个模块而不是包,您可以看到您的目录结构中缺少一个级别,因为您当前尝试使用 find_packages() 的方式。
您可以在项目结构中添加一个“src”文件夹。那么你将不得不做这样的事情:
mkdir src
mv my_package src/
Run Code Online (Sandbox Code Playgroud)
在 setup.py 中将 find_packages 指向 'src' 而不是 'my_package':
packages=find_packages(where="src"),
package_dir={'': 'src'},
Run Code Online (Sandbox Code Playgroud)
解决方案#2
或者,您可以尝试使用不带任何参数的 find_packages(如https://packaging.python.org/tutorials/packaging-projects/所建议的):
packages=find_packages()
Run Code Online (Sandbox Code Playgroud)
当我设置我的包时,这对我不起作用,从长远来看,无论如何我会更好地使用 src/ 解决方案。这就是为什么我的初始版本的答案假设您要添加 src/.
个人结论
请记住,如果您将来可能有更多的包,想要将脚本添加到您的包中或做任何比一个包更复杂的事情,那么使用 src/ 可能是明智的。我知道这多年来一直是讨论的话题,这就是为什么我将其称为“个人结论”。
| 归档时间: |
|
| 查看次数: |
2970 次 |
| 最近记录: |