benfred / py-spy

Sampling profiler for Python programs
MIT License
12.14k stars 400 forks source link

Failing to build or install py-spy on Mac OS 13 #596

Open jrabinow opened 1 year ago

jrabinow commented 1 year ago

I'm trying to build py-spy to add it to MacPorts, but I seem to be running into an issue with libproc. Machine info:

macOS 13.3 22E252 arm64
Xcode 14.3 14E222b

When attempting to cargo install, I get the following error:

$ cargo install py-spy
error: failed to run custom build command for `libproc v0.12.0`

Caused by:
  process didn't exit successfully: `/var/folders/4q/2c5n_3vx589cd7qdpn31dxfm0000gn/T/cargo-installdn4ixI/release/build/libproc-194877f4dcf5bf8d/build-script-build` (exit status: 101)
  --- stderr
  /Users/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/libproc-0.12.0/libproc_rs.h:1:10: fatal error: 'libproc.h' file not found
  /Users/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/libproc-0.12.0/libproc_rs.h:1:10: fatal error: 'libproc.h' file not found, err: true
  thread 'main' panicked at 'Failed to build libproc bindings: ()', /Users/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/libproc-0.12.0/build.rs:9:10
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: failed to run custom build command for `libproc v0.13.0`

Caused by:
  process didn't exit successfully: `/var/folders/4q/2c5n_3vx589cd7qdpn31dxfm0000gn/T/cargo-installdn4ixI/release/build/libproc-0bbbc2f2356e2d3b/build-script-build` (exit status: 101)
  --- stderr
  /Users/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/libproc-0.13.0/libproc_rs.h:1:10: fatal error: 'libproc.h' file not found
  thread 'main' panicked at 'Failed to build libproc bindings: ClangDiagnostic("/Users/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/libproc-0.13.0/libproc_rs.h:1:10: fatal error: 'libproc.h' file not found\n")', /Users/user/.car
go/registry/src/index.crates.io-6f17d22bba15001f/libproc-0.13.0/build.rs:10:10
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: failed to compile `py-spy v0.3.14`, intermediate artifacts can be found at `/var/folders/4q/2c5n_3vx589cd7qdpn31dxfm0000gn/T/cargo-installdn4ixI`

My attempt at a macports port seems to be running into an issue with libproc as well: macports_build.txt

Any ideas on how I could get py-spy to build?

benfred commented 11 months ago

it looks like libproc is failing to build here w/ fatal error: 'libproc.h' file not found .

This seems to be the same error as https://github.com/andrewdavidmackenzie/libproc-rs/issues/82 .

I just built successfully on my OSX system, but I'm still on Catalina (and on an intel based machine).

jrabinow commented 11 months ago

Thanks for linking both issues, I reported my issue upstream along with a patch. I'm not sure how long it'll take to fix or what functionality is included in the libproc library - asking with zero context here, does it make sense to try to remove the dependency on libproc-rs? If not, it might make sense to close this issue since it looks like the problem is upstream

benfred commented 11 months ago

does it make sense to try to remove the dependency on libproc-rs?

py-spy isn't actually using libproc directly, libproc is being used by the remoteprocess and proc-maps dependencies of py-spy. the remoteprocess dependency is using it to get the exe/cwd https://github.com/benfred/remoteprocess/blob/70509587992eead0fdeb5534125c8ac7db2ce9a8/src/osx/mod.rs#L50-L62 - and proc-maps is using it to get the filename for a region of memory https://github.com/rbspy/proc-maps/blob/6d6fcb987fe663a7232b90a4182feb0dfc7c1f4c/src/mac_maps/mod.rs#L146 .

We could replace it in both cases, but ideally we'd just get it fixed upstream.

jrabinow commented 9 months ago

Both libproc-rs and proc-maps have released new versions with the fix

jrabinow commented 8 months ago

Hi @benfred would it be possible to release a new version of py-spy including the upstream fix from libproc-rs?