{"record":{"id":"987bbdf8db0417be","repo":"golang/go","slug":"s-argument-must-be-a-package-path-not-an-absolu","errorCode":null,"errorMessage":"%s: argument must be a package path, not an absolute path","messagePattern":"(.+?): argument must be a package path, not an absolute path","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/go/internal/load/pkg.go","lineNumber":3407,"sourceCode":"\t\tif i := strings.Index(arg, \"@\"); i >= 0 {\n\t\t\tfirstPath, version = arg[:i], arg[i+1:]\n\t\t\tif version == \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: version must not be empty\", arg)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tpatterns := make([]string, len(args))\n\tfor i, arg := range args {\n\t\tp, found := strings.CutSuffix(arg, \"@\"+version)\n\t\tif !found {\n\t\t\treturn nil, fmt.Errorf(\"%s: all arguments must refer to packages in the same module at the same version (@%s)\", arg, version)\n\t\t}\n\t\tswitch {\n\t\tcase build.IsLocalImport(p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a package path, not a relative path\", arg)\n\t\tcase filepath.IsAbs(p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a package path, not an absolute path\", arg)\n\t\tcase search.IsMetaPackage(p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a package path, not a meta-package\", arg)\n\t\tcase pathpkg.Clean(p) != p:\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a clean package path\", arg)\n\t\tcase !strings.Contains(p, \"...\") && search.IsStandardImportPath(p) && modindex.IsStandardPackage(cfg.GOROOT, cfg.BuildContext.Compiler, p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must not be a package in the standard library\", arg)\n\t\tdefault:\n\t\t\tpatterns[i] = p\n\t\t}\n\t}\n\tpatterns = search.CleanPatterns(patterns)\n\n\t// Query the module providing the first argument, load its go.mod file, and\n\t// check that it doesn't contain directives that would cause it to be\n\t// interpreted differently if it were the main module.\n\t//\n\t// If multiple modules match the first argument, accept the longest match\n\t// (first result). It's possible this module won't provide packages named by","sourceCodeStart":3389,"sourceCodeEnd":3425,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/go/internal/load/pkg.go#L3389-L3425","documentation":"Returned by PackagesAndErrorsOutsideModule (line 3407) when, after stripping @version, filepath.IsAbs(p) is true. Absolute filesystem paths are rejected for the same reason relative paths are (897): `go install pkg@version` targets a module by import path, not a file on disk. The arg as written is echoed.","triggerScenarios":"Running `go install /home/me/go/src/app/cmd/app@v1.0.0` or any absolute path with an @version. Common when porting a GOPATH-era script that used absolute paths.","commonSituations":"Migrating from old GOPATH workflows; CI scripts computing absolute paths; sharing a command line across machines with hardcoded paths.","solutions":["Use the module's import path with @version: `go install example.com/app/cmd/app@v1.0.0`.","If you mean to install a local package, drop @version and use a relative path: `go install ./cmd/app`."],"exampleFix":"# before\ngo install /home/me/app/cmd/app@v1.0.0\n# after\ngo install example.com/app/cmd/app@v1.0.0","handlingStrategy":"validation","validationCode":"// Reject absolute paths in `go install pkg@version` args.\npackage argcheck\n\nimport (\n\t\"errors\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\nfunc NotAbsolutePath(arg string) error {\n\tp := arg\n\tif i := strings.Index(arg, \"@\"); i >= 0 {\n\t\tp = arg[:i]\n\t}\n\tif filepath.IsAbs(p) {\n\t\treturn errors.New(\"absolute path not allowed with @version: \" + arg)\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the module's published import path for `go install pkg@version`.","For local builds without @version, relative paths are fine."],"tags":["modules","go-install","cli","toolchain"],"backgroundTag":null,"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}