7

I want to use a local package which is located in my home directory. By default, Cargo searches for dependencies relative to Cargo.toml. If I know where my project is located relative to the home folder, I can do something like this:

[dependencies] tools = { path = "../../rust_libs/tools" } 

I don't always know where my project is located and I would like to do something like this:

[dependencies] tools = { path = "${HOME}/rust_libs/tools" } 

How can I get the home path inside of Cargo.toml? Maybe there are other ways to achieve this?

2
  • Did you try ~/rust_libs/tools? Commented Apr 5, 2021 at 12:10
  • @Dmitry yes. It just appends this path to Cargo.toml path and shows error. "Unable to update /Users/vladas/dev/sand/rust_sand/~/rust_libs/tools" Commented Apr 5, 2021 at 14:16

3 Answers 3

9

You can try to workaround this issue with native linux soft links:

  1. Create a soft link to ~/rust_libs/tools in your Cargo.toml's directory using commad:
ln -s ~/rust_libs/tools 
  1. In Cargo.toml just use relative path:
[dependencies] tools = { path = "tools" } 
Sign up to request clarification or add additional context in comments.

Comments

5

It should work if you use a path that starts with '/' which should be recognized as an absolute path. If the path starts with ~/ or $HOME/ and there is no env variable expansion, then those paths will look like a relative path, and cargo will prepend the current path. I don't think Cargo.toml supports substituting environment variables, so you will have to specify the whole path (ie. /Users/vladas/rust_libs/tools)

4 Comments

It works for paths starting with '/'. Thank you. But with this approach i still need to know user name and also the path will be different on windows and linux. Is there a way to make it crossplatform?
@VladasZs Sorry it's not clear what you did. How did you get it to work?
[dependencies] tools = { path = "/Users/vladas/rust_libs/tools" }
I can't get it to work on Windows. Complains about invalid path no matter what I try.
2

On Windows:

dioxus-web = {path = "D:/github/dioxus/packages/web"} dioxus-desktop = {path = "D:\\github\\dioxus\\packages\\desktop"} 

Both are working.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.