You probably shouldn't have it as autoload.
Whatever is an autoload is going to be loaded well before the other things, and will not find the other nodes and thus complain about null instances. You could implement checks such as is valid instance or is in tree or such(and that's a good idea/practice anyways) but honestly there's only so much that should be an autoload/global in the first place. If it can be avoided, I'd avoid making things unnecessarily autoloads.
Your instinct might be to think that having something be an autoload is going to make your life easier, but in most cases it likely just makes your life more difficult.
As a compromise you can have a globals script set as a autoload that can hold a variable and a function that will get and store the nodepath to your player node/script in that variable so you can more conveniently access your player node when and where needed. That's at least marginally better.
What you then have is your player script on ready connect a signal and call that signal on the global to let it know that it's been instanced and then in that method triggered by the signal it gets the players nodepath and stores it in the variable.