Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将attr与src布局一起使用时发生ModuleNotFoundError_Python 3.x_Setuptools_Setup.py - Fatal编程技术网

Python 3.x 将attr与src布局一起使用时发生ModuleNotFoundError

Python 3.x 将attr与src布局一起使用时发生ModuleNotFoundError,python-3.x,setuptools,setup.py,Python 3.x,Setuptools,Setup.py,我正在使用setuptools开发一个Python包。我使用src布局设置了配置。在Travis CI上的Python3.6上,我得到了一个ModuleNotFoundError src布局提供了以下结构: 我的包 ├── setup.cfg ├── setup.py └── src └── 我的包 ├── my_file.py └── version.py 正如文档中所解释的,我使用attr:说明符获取版本。我还使用extras\u require键获取一些额外的依赖项() 然后,我使用pi

我正在使用
setuptools
开发一个Python包。我使用src布局设置了配置。在Travis CI上的Python3.6上,我得到了一个
ModuleNotFoundError

src布局提供了以下结构:

我的包
├── setup.cfg
├── setup.py
└── src
└── 我的包
├── my_file.py
└── version.py
正如文档中所解释的,我使用
attr:
说明符获取版本。我还使用
extras\u require
键获取一些额外的依赖项()

然后,我使用
pip
安装依赖项:

pip安装-e.“[test]”
这在使用Python3.7的本地环境和使用Python3.5的Travis CI环境中无缝工作。但是在使用Python 3.6的Travis CI环境中,我得到了一个
ModuleNotFoundError

获取file:///home/travis/build/me/my-package
从命令python setup.py egg_info完成输出:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/travis/build/me/my-package/setup.py”,第4行,在
设置()
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/setuptools/_-init__.py”,第129行,在安装程序中
返回distutils.core.setup(**attrs)
文件“/opt/python/3.6.3/lib/python3.6/distutils/core.py”,第121行,在安装程序中
dist.parse_config_文件()
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site packages/setuptools/dist.py”,第436行,在parse_config_文件中
忽略选项错误=忽略选项错误)
parse_配置中的文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site packages/setuptools/config.py”,第106行
meta.parse()
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site packages/setuptools/config.py”,第382行,在parse中
section\u解析器\u方法(section\u选项)
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site packages/setuptools/config.py”,第355行,在parse_部分
self[name]=值
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site packages/setuptools/config.py”,第173行,在_setitem中__
value=parser(value)
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site packages/setuptools/config.py”,第428行,解析版本
version=self.\u parse\u attr(值)
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/site packages/setuptools/config.py”,第305行,在
模块=导入模块(模块名称)
文件“/home/travis/virtualenv/python3.6.3/lib/python3.6/importlib/_init__.py”,第126行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第994行,在_gcd_导入中
文件“”,第971行,在_find_和_load中
文件“”,第941行,在“查找”和“加载”中解锁
文件“”,第219行,在“调用”中,删除了“帧”
文件“”,第994行,在_gcd_导入中
文件“”,第971行,在_find_和_load中
文件“”,第953行,在“查找”和“加载”中解锁
ModuleNotFoundError:没有名为“my_package”的模块

怎么了?

Travis CI for Python 3.6提供的
setuptools
包似乎太旧,无法正确使用
attr:
说明符。可以使用此功能,而Travis CI Python 3.6提供了v38.2.4(因此出现错误),Travis CI Python 3.5提供了40.0.0(因此获得成功)

所以,我只是说:

pip安装--升级“setuptools>=40.0”

作为我的
.travis ci.yaml
文件中的一个先决条件。

在使用setuptools 46.x时,我遇到了相同的错误,但我的setup.cfg略有不同。这一部分很重要:

[options]
package_dir =
        =src
packages = find:

[options.packages.find]
where = src
[options]
package_dir =
        =src
packages = find:

[options.packages.find]
where = src