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()