简体   繁体   English

ModuleNotFoundError:没有名为“flake8”的模块

[英]ModuleNotFoundError: No module named 'flake8'

here is the part of the files that are important for this question:这是对这个问题很重要的文件部分:

.
├── .env
├── tox.ini
├── requirements-dev.txt
└── tests/
    ├── test_blocking.py
    └── test_async.py

.env example .env 示例

token = # Replace this with your API token
base_url = # Proxy server to handle requests to API due to IP limitations

tox.ini毒物

[tox]
envlist = py35,py36,py37,py38

[testenv]
changedir = tests
deps = -r{toxinidir}/requirements-dev.txt
sitepackages = true
whitelist_externals =
    flake8
    pytest
commands =
    flake8
    pytest
passenv =
    token
    base_url

[flake8]
max-line-length=120
exclude = __init__.py,.tox
ignore = E252,E302,E731,W605

requirements-dev.txt需求-dev.txt

asynctest
flake8
pluggy>=0.12.0,<1.0.0
pytest
pytest-asyncio
python-dotenv
tox-travis

with files from tests/ everything is OK, they work on other versions使用来自测试的文件/一切正常,它们适用于其他版本

if, from the project's home directory, in cmd I run such a command tox -e py38如果,从项目的主目录,在 cmd 我运行这样一个命令tox -e py38

I get this output:我得到这个 output:

GLOB sdist-make: C:\Python\projects\brawlstats\setup.py
py38 inst-nodeps: C:\Python\projects\brawlstats\.tox\.tmp\package\1\brawlstats-4.0.3.zip
py38 installed: absl-py==0.9.0,aiohttp==3.6.2,alabaster==0.7.12,altgraph==0.17,apng==0.3.4,appdirs==1.4.3,argh==0.26.2,asgiref==3.2.3,astroid==2.3.3,astunparse==1.6.3,async-timeout==3.0.1,asynctest==0.13.0,atomicwrites==1.3.0,attrs==19.3.0,audio2numpy==0.1.2,autopep8==1.5.1,Babel==2.8.0,backcall==0.1.0,bandit==1.6.2,beautifulsoup4==4.9.0,bleach==3.1.4,blis==0.4.1,brawlstats==4.0.3,bs4==0.0.1,cachetools==4.0.0,catalogue==1.0.0,certifi==2019.11.28,cfgv==3.1.0,chardet==3.0.4,click==7.1.1,colorama==0.4.1,colorlog==4.1.0,colour==0.1.5,cPython==0.0.5,cycler==0.10.0,cymem==2.0.3,decorator==4.4.1,defusedxml==0.6.0,distlib==0.3.0,Django==3.0.3,dnspython==1.16.0,docutils==0.16,dodgy==0.2.1,EasyProcess==0.2.10,entrypoint2==0.2,entrypoints==0.3,eventlet==0.25.2,fbs==0.8.6,feedparser==5.2.1,ffmpeg==1.4,filelock==3.0.12,flake8==3.8.3,flake8-polyfill==1.0.2,future==0.18.2,futures==3.1.1,gast==0.3.3,gitdb2==2.0.6,GitPython==2.1.15,google-api-core==1.16.0,google-api-python-client==1.8.2,google-auth==1.11.3,google-auth-httplib2==0.0.3,google-auth-oauthlib==0.4.1,google-cloud-core==1.3.0,google-cloud-translate==2.0.1,google-pasta==0.2.0,googleapis-common-protos==1.51.0,googletrans==2.4.0,goslate==1.5.1,greenlet==0.4.16,grpcio==1.27.2,h5py==2.10.0,httplib2==0.15.0,identify==1.4.11,idna==2.9,imagesize==1.2.0,ipykernel==5.2.1,ipython==7.13.0,ipython-genutils==0.2.0,isort==4.3.21,jedi==0.17.0,Jinja2==2.11.2,json5==0.9.4,jsonschema==3.2.0,jupyter-client==6.1.3,jupyter-core==4.6.3,jupyterlab==2.1.1,jupyterlab-server==1.1.1,Keras-Preprocessing==1.1.2,kivy-deps.angle==0.1.10,kivy-deps.glew==0.1.12,kivy-deps.gstreamer==0.1.18,kivy-deps.sdl2==0.1.23,Kivy-Garden==0.1.4,kiwisolver==1.1.0,lazy-object-proxy==1.4.3,livereload==2.6.2,llvmlite==0.33.0,lxml==4.5.0,macholib==1.14,mando==0.6.4,Markdown==3.2.2,MarkupSafe==1.1.1,matplotlib==3.1.3,mccabe==0.6.1,mistune==0.8.4,monotonic==1.5,more-itertools==8.2.0,mss==5.0.0,multidict==4.7.5,murmurhash==1.0.2,mypy==0.782,mypy-extensions==0.4.3,nbconvert==5.6.1,nbformat==4.4.0,networkx==2.4,nodeenv==1.3.5,notebook==6.0.3,Nuitka==0.6.8.4,numba==0.50.0,numpy==1.18.1,oauth2client==4.1.3,oauthlib==3.1.0,opencv-python==4.2.0.32,opt-einsum==3.2.1,packaging==20.3,pandas==1.0.3,pandocfilters==1.4.2,parso==0.7.0,pathtools==0.1.2,pbr==5.4.5,pefile==2019.4.18,pep8==1.7.1,pep8-naming==0.4.1,pickleshare==0.7.5,Pillow==7.0.0,plac==1.1.3,plotly==4.8.0,pluggy==0.13.1,port-for==0.3.1,pre-commit==2.2.0,preshed==3.0.2,progress==1.4,prometheus-client==0.7.1,prompt-toolkit==3.0.5,prospector==1.2.0,protobuf==3.11.3,py==1.8.1,pyasn1==0.4.8,pyasn1-modules==0.2.8,pycodestyle==2.6.0,pydocstyle==5.0.2,PyDrive==1.3.1,pydub==0.23.1,pyflakes==2.2.0,pygame==1.9.6,pyglet==1.5.2,Pygments==2.6.1,PyInstaller==3.4,pylama==7.7.1,pylint==2.4.4,pylint-celery==0.3,pylint-django==2.0.12,pylint-flask==0.6,pylint-plugin-utils==0.6,pymongo==3.10.1,pynput==1.6.6,pyparsing==2.4.6,pypiwin32==223,PyQt-builder==1.2.0,PyQt5==5.13.2,PyQt5-sip==12.7.1,pyqt5-tools==5.13.2.1.6rc1,pyrsistent==0.16.0,pyscreenshot==1.0,PySimpleGUI==4.18.0,pytest==5.4.1,pytest-asyncio==0.14.0,python-box==4.2.2,python-dateutil==2.8.1,python-dotenv==0.12.0,python-statemachine==0.8.0,pytz==2019.3,pywin32==227,pywin32-ctypes==0.2.0,pywinpty==0.5.7,PyYAML==5.3,pyzmq==19.0.0,qimage2ndarray==1.8.3,radon==4.0.0,requests==2.23.0,requests-oauthlib==1.3.0,requirements-detector==0.7,retrying==1.3.3,rope==0.16.0,rsa==4.0,rstcheck==3.3.1,ruamel.yaml==0.16.10,ruamel.yaml.clib==0.2.0,scipy==1.4.1,selenium==3.141.0,Send2Trash==1.5.0,setoptconf==0.2.0,simpleaudio==1.0.4,sip==5.1.1,six==1.14.0,smmap==3.0.4,smmap2==3.0.1,snowballstemmer==2.0.0,soupsieve==2.0,spacy==2.2.4,Sphinx==3.1.1,sphinx-autobuild==0.7.1,sphinxcontrib-applehelp==1.0.2,sphinxcontrib-devhelp==1.0.2,sphinxcontrib-htmlhelp==1.0.3,sphinxcontrib-jsmath==1.0.1,sphinxcontrib-qthelp==1.0.3,sphinxcontrib-serializinghtml==1.1.4,sqlparse==0.3.0,srsly==1.0.2,stevedore==2.0.1,tabulate==0.8.7,tensorboard==2.2.1,tensorboard-plugin-wit==1.6.0.post3,tensorflow==2.2.0,tensorflow-estimator==2.2.0,tensorflow-hub==0.8.0,termcolor==1.1.0,terminado==0.8.3,testpath==0.4.4,thinc==7.4.0,tkcalendar==1.6.1,toml==0.10.0,tornado==6.0.4,tox==3.14.5,tox-travis==0.12,tqdm==4.46.0,traitlets==4.3.3,translate==3.5.0,typed-ast==1.4.1,typing-extensions==3.7.4.2,uritemplate==3.0.1,urllib3==1.25.8,virtualenv==20.0.15,vk-api==11.8.0,wasabi==0.6.0,watchdog==0.10.3,wcwidth==0.1.9,webencodings==0.5.1,Werkzeug==1.0.1,wily==1.16.0,wrapt==1.11.2,wxPython==4.0.7.post2,yarl==1.4.2
py38 run-test-pre: PYTHONHASHSEED='87'
py38 run-test: commands[0] | flake8
Traceback (most recent call last):
  File "c:\program files\python38\lib\runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\program files\python38\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\ASUS\AppData\Roaming\Python\Python38\Scripts\flake8.EXE\__main__.py", line 4, in <module>
ModuleNotFoundError: No module named 'flake8'
ERROR: InvocationError for command 'C:\Users\ASUS\AppData\Roaming\Python\Python38\Scripts\flake8.EXE' (exited with code 1)
_________________________________________________________________________________ summary _________________________________________________________________________________
ERROR:   py38: commands failed

also if i run pip3.8 show flake8如果我运行pip3.8 show flake8

I get this output:我得到这个 output:

Name: flake8
Version: 3.8.3
Summary: the modular source code checker: pep8 pyflakes and co
Home-page: https://gitlab.com/pycqa/flake8
Author: Tarek Ziade
Author-email: tarek@ziade.org
License: MIT
Location: c:\users\asus\appdata\roaming\python\python38\site-packages
Requires: pycodestyle, mccabe, pyflakes
Required-by: flake8-polyfill

what am I doing wrong?我究竟做错了什么? on py 3.7 everything works fine.在 py 3.7 上一切正常。 maybe my tox is bad?也许我的毒素不好? what should I do?我应该怎么办? please, help!请帮忙!

My compliments on such an extensive report.我对如此广泛的报告表示赞赏。 Your issue lies probably in this weird setup you've got going on.您的问题可能在于您正在进行的这种奇怪的设置。

# This alows for packages to be accessed from the **globally** installed Python (NOT the tox env). 
sitepackages = True
# This alows for commands to be used available outside tox. Typically used for non-python callables. 
whitelist_externals =
    flake8
    pytest
# Redundant || the context change is confusing - try to use everything from the project root. 
changedir = tests

So in short you're not using the tox dependencies.所以简而言之,您没有使用tox依赖项。 You're trying to use global packages and not the ones that tox installed.您正在尝试使用全局包,而不是安装了tox的包。 This, some conjecture, probably lead to some import conflict in python 3.8 globally available packages.一些推测,这可能会导致 python 3.8 全局可用包中的一些导入冲突。

Try the following:尝试以下操作:

[tox]
envlist = py35,py36,py37,py38

[testenv]
deps = -r{toxinidir}/requirements-dev.txt
commands =
    flake8 {{folders}}
    pytest 
passenv =
    token
    base_url

[flake8]
max-line-length=120
exclude = __init__.py
ignore = E252,E302,E731,W605

PS. PS。 Replace {{folders}} with whatever your directory(ies) off code are, usually easier than excluding all kinds of dirs (that might be autogenerated in the future).将 {{folders}} 替换为您的目录(IES)关闭代码,通常比排除各种目录(将来可能会自动生成)更容易。 I typically have flake8 src tests .我通常有flake8 src tests

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM