https://stackoverflow.com/questions/11091623/how-to-install-packages-offline
##On the system that has access to internet
The pip download command lets you download packages without installing them:
pip download -r requirements.txt
(In previous versions of pip, this was spelled pip install --download -r requirements.txt.)
##On the system that has no access to internet
Copy over the downloaded packages to this system and then you can use
pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
to install those downloaded modules, without accessing the network.
https://stackoverflow.com/questions/4273939/python-subprocess-popen-as-different-user-on-windows
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
import win32con
import win32process
import win32security
from subprocess import *
__all__ = ["Popen","PIPE", "STDOUT", "call", "check_call",
"CalledProcessError", "CREATE_NEW_CONSOLE", "LoginSTARTUPINFO",
"STARTUPINFO"]
class LoginSTARTUPINFO(object):
"""
Special STARTUPINFO instance that carries login credentials. When a
LoginSTARTUPINFO instance is used with Popen, the process will be executed
with the credentials used to instantiate the class.
If an existing vanilla STARTUPINFO instance needs to be converted, it
can be supplied as the last parameter when instantiating LoginSTARTUPINFO.
The LoginSTARTUPINFO cannot be used with the regular subprocess module.
>>> import subprocesswin32 as subprocess
>>> sysuser = LoginSTARTUPINFO("username", "pswd123", "machine")
>>> stdout, stderr = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE,
... startupinfo=sysuser).communicate()
"""
def __init__(self, username, domain, password, startupinfo=None):
m_startupinfo = win32process.STARTUPINFO()
# Creates an actual win32 STARTUPINFO class using the attributes
# of whatever STARTUPINFO-like object we are passed.
for attr in dir(startupinfo):
if not(attr.startswith("_") or attr not in dir(m_startupinfo)):
setattr(m_startupinfo, attr, getattr(startupinfo, attr))
# Login credentials
self.credentials = (username, domain, password)
# Proper win32 STARTUPINFO representation for CreateProcess
self.win32startupinfo = m_startupinfo
def CreateProcess(*args):
startupinfo = args[-1]
# If we are passed a LoginSTARTUPINFO, that means we need to use
# CreateProcessAsUser instead of the CreateProcess in subprocess
if isinstance(startupinfo, LoginSTARTUPINFO):
# Gets the actual win32 STARTUPINFO object from LoginSTARTUPINFO
win32startupinfo = startupinfo.win32startupinfo
mkprocargs = args[:-1] + (win32startupinfo,)
login, domain, password = startupinfo.credentials
# Get a user handle from the credentials
userhandle = win32security.LogonUser(login, domain, password,
win32con.LOGON32_LOGON_INTERACTIVE,
win32con.LOGON32_PROVIDER_DEFAULT)
try:
# Return the pipes from CreateProcessAsUser
return win32process.CreateProcessAsUser(userhandle, *mkprocargs)
finally:
# Close the userhandle before throwing whatever error arises
userhandle.Close()
return win32process.CreateProcess(*args)
# Overrides the CreateProcess module of subprocess with ours. CreateProcess
# will automatically act like the original CreateProcess when it is not passed
# a LoginSTARTUPINFO object.
STARTUPINFO = subprocess.STARTUPINFO = win32process.STARTUPINFO
subprocess._subprocess.CreateProcess = CreateProcess
and use:
>>> import subprocesswin32 as subprocess
>>> sysuser = LoginSTARTUPINFO("username", "pswd123", "machine")
>>> stdout, stderr = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE,
... startupinfo=sysuser).communicate()
- on peut créer des modules installable avec
pip
- on peut créer des executables qui n'ont pas besoin de python sur la machine cible
Pour le premier point, voir le cours.
Pour le deuxième, on peut utiliser pyinstaller
. Il y a un exemple dans "tape_en_cours". On peut également utiliser un wrapper pour pyinstaller : auto py to exe
, voici un tutoriel en francais : https://www.docstring.fr/formations/convertir-un-script-en-fichier-executable/avec-auto-py-to-exe-sur-windows-1523/