Pyinstaller compiled binary runs from %temp% folder





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I am using sys.path[0] in my script to detect the folder my script resides in. I have no issues running the executing the .py file.



I then compile the script using pyinstaller and run it, it fails. I noticed that when exe runs, the sys.path[0] changes to %temp%. Looks like exe runs from %temp% directory. However, in another place I reference sys.argv[1] which does not change.



For example, I see the following when exe runs:



sys.path[0] -> C:\Users\<username>\AppData\LocalTemp<temp folder>



sys.argv[1] -> C:pathwhereexe resides










share|improve this question


















  • 1





    Are you using the "One-File" mode of Pyinstaller? if so: When started it creates a temporary folder in the appropriate temp-folder location for this OS. The folder is named _MEIxxxxxx, where xxxxxx is a random number. (from the documentation)

    – John Anderson
    Nov 16 '18 at 19:44













  • Yes, I am using the --onefile option.

    – user6037143
    Nov 16 '18 at 20:18











  • So, what do you use sys.path[0] and sys.argv[1] for ?

    – John Anderson
    Nov 16 '18 at 20:21











  • Using sys.argv[1] to check for the existence of CLI argument. Not using argparse because there is no arg parsing required, the script just requires one argument to be passed to a function later. For sys.path[0], the script loads external binaries that are stored in the same folder as the script, so I needed a to detect the path the script is stored in. I changed my code to path = sys.argv[0]; path = "%s\drivers" % '\'.join(path.split('\')[0:-1]). It works now.

    – user6037143
    Nov 16 '18 at 20:27








  • 1





    For future reference, you can check if your app is being run in a Pyinstaller bundle by checking if getattr( sys, 'frozen', False ):. And if so, the absolute path to the bundle folder is sys._MEIPASS.

    – John Anderson
    Nov 17 '18 at 0:16




















0















I am using sys.path[0] in my script to detect the folder my script resides in. I have no issues running the executing the .py file.



I then compile the script using pyinstaller and run it, it fails. I noticed that when exe runs, the sys.path[0] changes to %temp%. Looks like exe runs from %temp% directory. However, in another place I reference sys.argv[1] which does not change.



For example, I see the following when exe runs:



sys.path[0] -> C:\Users\<username>\AppData\LocalTemp<temp folder>



sys.argv[1] -> C:pathwhereexe resides










share|improve this question


















  • 1





    Are you using the "One-File" mode of Pyinstaller? if so: When started it creates a temporary folder in the appropriate temp-folder location for this OS. The folder is named _MEIxxxxxx, where xxxxxx is a random number. (from the documentation)

    – John Anderson
    Nov 16 '18 at 19:44













  • Yes, I am using the --onefile option.

    – user6037143
    Nov 16 '18 at 20:18











  • So, what do you use sys.path[0] and sys.argv[1] for ?

    – John Anderson
    Nov 16 '18 at 20:21











  • Using sys.argv[1] to check for the existence of CLI argument. Not using argparse because there is no arg parsing required, the script just requires one argument to be passed to a function later. For sys.path[0], the script loads external binaries that are stored in the same folder as the script, so I needed a to detect the path the script is stored in. I changed my code to path = sys.argv[0]; path = "%s\drivers" % '\'.join(path.split('\')[0:-1]). It works now.

    – user6037143
    Nov 16 '18 at 20:27








  • 1





    For future reference, you can check if your app is being run in a Pyinstaller bundle by checking if getattr( sys, 'frozen', False ):. And if so, the absolute path to the bundle folder is sys._MEIPASS.

    – John Anderson
    Nov 17 '18 at 0:16
















0












0








0








I am using sys.path[0] in my script to detect the folder my script resides in. I have no issues running the executing the .py file.



I then compile the script using pyinstaller and run it, it fails. I noticed that when exe runs, the sys.path[0] changes to %temp%. Looks like exe runs from %temp% directory. However, in another place I reference sys.argv[1] which does not change.



For example, I see the following when exe runs:



sys.path[0] -> C:\Users\<username>\AppData\LocalTemp<temp folder>



sys.argv[1] -> C:pathwhereexe resides










share|improve this question














I am using sys.path[0] in my script to detect the folder my script resides in. I have no issues running the executing the .py file.



I then compile the script using pyinstaller and run it, it fails. I noticed that when exe runs, the sys.path[0] changes to %temp%. Looks like exe runs from %temp% directory. However, in another place I reference sys.argv[1] which does not change.



For example, I see the following when exe runs:



sys.path[0] -> C:\Users\<username>\AppData\LocalTemp<temp folder>



sys.argv[1] -> C:pathwhereexe resides







python pyinstaller






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 19:37









user6037143user6037143

12311




12311








  • 1





    Are you using the "One-File" mode of Pyinstaller? if so: When started it creates a temporary folder in the appropriate temp-folder location for this OS. The folder is named _MEIxxxxxx, where xxxxxx is a random number. (from the documentation)

    – John Anderson
    Nov 16 '18 at 19:44













  • Yes, I am using the --onefile option.

    – user6037143
    Nov 16 '18 at 20:18











  • So, what do you use sys.path[0] and sys.argv[1] for ?

    – John Anderson
    Nov 16 '18 at 20:21











  • Using sys.argv[1] to check for the existence of CLI argument. Not using argparse because there is no arg parsing required, the script just requires one argument to be passed to a function later. For sys.path[0], the script loads external binaries that are stored in the same folder as the script, so I needed a to detect the path the script is stored in. I changed my code to path = sys.argv[0]; path = "%s\drivers" % '\'.join(path.split('\')[0:-1]). It works now.

    – user6037143
    Nov 16 '18 at 20:27








  • 1





    For future reference, you can check if your app is being run in a Pyinstaller bundle by checking if getattr( sys, 'frozen', False ):. And if so, the absolute path to the bundle folder is sys._MEIPASS.

    – John Anderson
    Nov 17 '18 at 0:16
















  • 1





    Are you using the "One-File" mode of Pyinstaller? if so: When started it creates a temporary folder in the appropriate temp-folder location for this OS. The folder is named _MEIxxxxxx, where xxxxxx is a random number. (from the documentation)

    – John Anderson
    Nov 16 '18 at 19:44













  • Yes, I am using the --onefile option.

    – user6037143
    Nov 16 '18 at 20:18











  • So, what do you use sys.path[0] and sys.argv[1] for ?

    – John Anderson
    Nov 16 '18 at 20:21











  • Using sys.argv[1] to check for the existence of CLI argument. Not using argparse because there is no arg parsing required, the script just requires one argument to be passed to a function later. For sys.path[0], the script loads external binaries that are stored in the same folder as the script, so I needed a to detect the path the script is stored in. I changed my code to path = sys.argv[0]; path = "%s\drivers" % '\'.join(path.split('\')[0:-1]). It works now.

    – user6037143
    Nov 16 '18 at 20:27








  • 1





    For future reference, you can check if your app is being run in a Pyinstaller bundle by checking if getattr( sys, 'frozen', False ):. And if so, the absolute path to the bundle folder is sys._MEIPASS.

    – John Anderson
    Nov 17 '18 at 0:16










1




1





Are you using the "One-File" mode of Pyinstaller? if so: When started it creates a temporary folder in the appropriate temp-folder location for this OS. The folder is named _MEIxxxxxx, where xxxxxx is a random number. (from the documentation)

– John Anderson
Nov 16 '18 at 19:44







Are you using the "One-File" mode of Pyinstaller? if so: When started it creates a temporary folder in the appropriate temp-folder location for this OS. The folder is named _MEIxxxxxx, where xxxxxx is a random number. (from the documentation)

– John Anderson
Nov 16 '18 at 19:44















Yes, I am using the --onefile option.

– user6037143
Nov 16 '18 at 20:18





Yes, I am using the --onefile option.

– user6037143
Nov 16 '18 at 20:18













So, what do you use sys.path[0] and sys.argv[1] for ?

– John Anderson
Nov 16 '18 at 20:21





So, what do you use sys.path[0] and sys.argv[1] for ?

– John Anderson
Nov 16 '18 at 20:21













Using sys.argv[1] to check for the existence of CLI argument. Not using argparse because there is no arg parsing required, the script just requires one argument to be passed to a function later. For sys.path[0], the script loads external binaries that are stored in the same folder as the script, so I needed a to detect the path the script is stored in. I changed my code to path = sys.argv[0]; path = "%s\drivers" % '\'.join(path.split('\')[0:-1]). It works now.

– user6037143
Nov 16 '18 at 20:27







Using sys.argv[1] to check for the existence of CLI argument. Not using argparse because there is no arg parsing required, the script just requires one argument to be passed to a function later. For sys.path[0], the script loads external binaries that are stored in the same folder as the script, so I needed a to detect the path the script is stored in. I changed my code to path = sys.argv[0]; path = "%s\drivers" % '\'.join(path.split('\')[0:-1]). It works now.

– user6037143
Nov 16 '18 at 20:27






1




1





For future reference, you can check if your app is being run in a Pyinstaller bundle by checking if getattr( sys, 'frozen', False ):. And if so, the absolute path to the bundle folder is sys._MEIPASS.

– John Anderson
Nov 17 '18 at 0:16







For future reference, you can check if your app is being run in a Pyinstaller bundle by checking if getattr( sys, 'frozen', False ):. And if so, the absolute path to the bundle folder is sys._MEIPASS.

– John Anderson
Nov 17 '18 at 0:16














0






active

oldest

votes












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53344310%2fpyinstaller-compiled-binary-runs-from-temp-folder%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53344310%2fpyinstaller-compiled-binary-runs-from-temp-folder%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Xamarin.iOS Cant Deploy on Iphone

Glorious Revolution

Dulmage-Mendelsohn matrix decomposition in Python