Python pip安装错误:包目录不存在
我已经看过类似的问题,但没有幸运的答案,我有以下结构Python pip安装错误:包目录不存在,python,pip,Python,Pip,我已经看过类似的问题,但没有幸运的答案,我有以下结构 ├── 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_co
├── 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
我的setup.py
看起来像
..
setup(name=..
...
packages=find_packages('my_package')
安装时,我得到以下错误
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.
如果存在sub_module1
,并且其中有一个init.py文件-为什么安装程序无法识别它?编辑:值得称赞的是,指出了这个问题的解决方案当然不止一个
解决方案#1
错误消息告诉您,解释器认为您有一个名为“sub_module1”的包。因为这显然是一个模块,而不是一个包,所以您可以看到,您当前尝试使用find_packages()的方式在目录结构中缺少了一个级别
您可以将“src”文件夹添加到项目的结构中。然后,您必须执行以下操作:
mkdir src
mv my_package src/
在setup.py中,将find_package改为“src”,而不是“my_package”:
packages=find_packages(where="src"),
package_dir={'': 'src'},
解决方案#2
或者,您可以尝试使用完全不带任何参数的find_包(如所建议的):
当我设置包时,这对我不起作用,从长远来看,不管怎样,使用src/解决方案,我会过得更好。这就是为什么我最初版本的答案假设您希望添加src/
个人结论
请记住,如果您将来可能会有更多的包,希望向包中添加脚本或执行比一个包更复杂的操作,那么使用src/可能是明智的。我知道这是多年来讨论的话题,这就是为什么我称之为“个人结论”。尝试:
packages=setuptools.find_packages(),
并在name=
中提及包名仍然是一个错误,尽管另一个包含并且您的PYTHONPATH环境变量当前包含:'
是,find\u包(包括我的包)
或find\u包()
。因为find_-package('my_-package')
的意思是my_-package(where='my_-package')
,它可以做其他事情,显然不是您需要的。不确定,这是用户想要的。另外,如果用户真的想要src
布局,他们还需要修改package\u dir
。我更喜欢这个版本的答案。我改变了我的投票。
packages=find_packages()