{"id":13442396,"url":"https://github.com/python-mode/python-mode","last_synced_at":"2025-12-16T18:03:51.189Z","repository":{"id":1681628,"uuid":"2408911","full_name":"python-mode/python-mode","owner":"python-mode","description":"Vim python-mode. PyLint, Rope, Pydoc, breakpoints from box.","archived":false,"fork":false,"pushed_at":"2025-11-17T20:03:40.000Z","size":11276,"stargazers_count":5470,"open_issues_count":37,"forks_count":770,"subscribers_count":270,"default_branch":"develop","last_synced_at":"2025-12-14T16:39:55.579Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/python-mode.png","metadata":{"files":{"readme":"README-Docker.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"liberapay":"diraol"}},"created_at":"2011-09-18T09:41:07.000Z","updated_at":"2025-12-02T19:37:29.000Z","dependencies_parsed_at":"2023-07-05T18:17:24.952Z","dependency_job_id":"f00f785f-7de7-4430-9faf-1e848a02feb0","html_url":"https://github.com/python-mode/python-mode","commit_stats":{"total_commits":814,"total_committers":137,"mean_commits":"5.9416058394160585","dds":"0.43611793611793614","last_synced_commit":"149ccf7c5be0753f5e9872c023ab2eeec3442105"},"previous_names":[],"tags_count":82,"template":false,"template_full_name":null,"purl":"pkg:github/python-mode/python-mode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-mode%2Fpython-mode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-mode%2Fpython-mode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-mode%2Fpython-mode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-mode%2Fpython-mode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python-mode","download_url":"https://codeload.github.com/python-mode/python-mode/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-mode%2Fpython-mode/sbom","scorecard":{"id":752216,"data":{"date":"2025-08-11","repo":{"name":"github.com/python-mode/python-mode","commit":"2db3b9ea1051b00ca32f12310d500a55b924c7f2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.5,"checks":[{"name":"Code-Review","score":3,"reason":"Found 3/8 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"13 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/build_base_image.yml:27","Warn: no topLevel permission defined: .github/workflows/build_base_image.yml:1","Warn: no topLevel permission defined: .github/workflows/test_pymode.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_base_image.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/build_base_image.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_base_image.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/build_base_image.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_base_image.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/build_base_image.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_base_image.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/build_base_image.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_base_image.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/build_base_image.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test_pymode.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/test_pymode.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test_pymode.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/test_pymode.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test_pymode.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/python-mode/python-mode/test_pymode.yml/develop?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:4","Warn: containerImage not pinned by hash: Dockerfile.base:1: pin your Docker image by updating ubuntu:24.04 to ubuntu:24.04@sha256:7c06e91f61fa88c08cc74f7e1b7c69ae24910d745357e0dfe1d2c0322aaf20f9","Warn: pipCommand not pinned by hash: Dockerfile.base:60-64","Warn: pipCommand not pinned by hash: Dockerfile.base:60-64","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v3.0: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/build_base_image.yml:21"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T20:40:46.755Z","repository_id":1681628,"created_at":"2025-08-22T20:40:46.755Z","updated_at":"2025-08-22T20:40:46.755Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27769150,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:01:45.226Z","updated_at":"2025-12-16T18:03:51.183Z","avatar_url":"https://github.com/python-mode.png","language":"Vim Script","readme":"# Docker Test Environment for python-mode\n\nThis directory contains Docker configuration to run python-mode tests locally. **Note:** Docker is only used for local development. CI tests run directly in GitHub Actions without Docker.\n\n## Prerequisites\n\n- Docker\n- Docker Compose\n\n## Quick Start\n\n### Run Tests\n\nTo run all tests in Docker (default version 3.13.0):\n\n```bash\n# Using the convenience script\n./scripts/user/run-tests-docker.sh\n\n# Or manually with docker-compose\ndocker compose run --rm python-mode-tests\n```\n\n### Interactive Development\n\nTo start an interactive shell for development:\n\n```bash\ndocker compose run --rm python-mode-dev\n```\n\n## What's Included\n\nThe Docker environment includes:\n\n- **Ubuntu 24.04** base image\n- **pyenv** for Python version management\n- **Multiple Python versions**: 3.10.13, 3.11.9, 3.12.4, 3.13.0\n- **Python 3.13.0** as default\n- **Vim built from source** with Python support for each Python version\n- All required system dependencies:\n  - GUI libraries (GTK, X11, etc.)\n  - Lua 5.2\n  - Perl\n  - Build tools\n  - Python build dependencies\n- **python-mode plugin** properly installed and configured\n- **Git submodules** initialized\n- **Test environment** matching the CI setup\n\n## Environment Details\n\nThe container replicates the GitHub Actions environment:\n\n- Vim is built with `--enable-python3interp=yes` for each Python version\n- pyenv is installed at `/opt/pyenv`\n- Python versions are managed by pyenv:\n  - 3.10.13\n  - 3.11.9\n  - 3.12.4\n  - 3.13.0 (default)\n- Each Python version has its own Vim binary: `vim-3.10.13`, `vim-3.11.9`, etc.\n- Python config directory is automatically detected using `python-config --configdir`\n- python-mode is installed in `/root/.vim/pack/foo/start/python-mode`\n- Test configuration files are copied to the appropriate locations\n- All required environment variables are set\n\n## Test Execution\n\n### Local Testing (Docker)\n\nTests are run using the Vader test framework via Docker Compose:\n\n```bash\n# Using docker compose directly\ndocker compose run --rm python-mode-tests\n\n# Or using the convenience script\n./scripts/user/run-tests-docker.sh\n\n# Or using the Vader test runner script\n./scripts/user/run_tests.sh\n```\n\n### CI Testing (Direct Execution)\n\nIn GitHub Actions CI, tests run directly without Docker using `scripts/cicd/run_vader_tests_direct.sh`. This approach:\n- Runs 3-5x faster (no Docker build/pull overhead)\n- Provides simpler debugging (direct vim output)\n- Uses the same Vader test suite for consistency\n\n**Vader Test Suites:**\n- **autopep8.vader** - Tests automatic code formatting (8/8 tests passing)\n- **commands.vader** - Tests Vim commands and autocommands (7/7 tests passing)\n- **folding.vader** - Tests code folding functionality\n- **lint.vader** - Tests linting functionality\n- **motion.vader** - Tests motion operators\n- **rope.vader** - Tests Rope refactoring features\n- **simple.vader** - Basic functionality tests\n- **textobjects.vader** - Tests text object operations\n\nAll legacy bash tests have been migrated to Vader tests.\n\n## Testing with Different Python Versions\n\nYou can test python-mode with different Python versions:\n\n```bash\n# Test with Python 3.11.9\n./scripts/user/run-tests-docker.sh 3.11\n\n# Test with Python 3.12.4\n./scripts/user/run-tests-docker.sh 3.12\n\n# Test with Python 3.13.0\n./scripts/user/run-tests-docker.sh 3.13\n```\n\nAvailable Python versions: 3.10.13, 3.11.9, 3.12.4, 3.13.0\n\nNote: Use the major.minor format (e.g., 3.11) when specifying versions.\n\n## Troubleshooting\n\n### Python Config Directory Issues\n\nThe Dockerfile uses `python-config --configdir` to automatically detect the correct Python config directory. If you encounter issues:\n\n1. Check that pyenv is properly initialized\n2. Verify that the requested Python version is available\n3. Ensure all environment variables are set correctly\n\n### Build Failures\n\nIf the Docker build fails:\n\n1. Check that all required packages are available in Ubuntu 24.04\n2. Verify that pyenv can download and install Python versions\n3. Ensure the Vim source code is accessible\n4. Check that pyenv is properly initialized in the shell\n\n### Test Failures\n\nIf tests fail in Docker but pass locally:\n\n1. Check that the Vim build includes Python support for the correct version\n2. Verify that all git submodules are properly initialized\n3. Ensure the test environment variables are correctly set\n4. Confirm that the correct Python version is active\n5. Verify that pyenv is properly initialized\n\n## Adding More Python Versions\n\nTo add support for additional Python versions:\n\n1. Add the new version to the PYTHON_VERSION arg in the Dockerfile\n2. Update the test scripts to include the new version\n3. Test that the new version works with the python-mode plugin\n4. Update this documentation with the new version information\n","funding_links":["https://liberapay.com/diraol"],"categories":["Tutorial","Editor Plugins and IDEs","Vim Script","编辑器插件和ide","\u003e 3k ★","Python","Vim script","Emacs [elpy](https://github.com/jorgenschaefer/elpy)：Emacs Python 开发环境。","Editor Plugins and IDEs [🔝](#readme)","资源列表","Awesome Python"],"sub_categories":["Windows Manager","编辑器插件和 IDE","Editor Plugins and IDEs"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpython-mode%2Fpython-mode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpython-mode%2Fpython-mode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpython-mode%2Fpython-mode/lists"}