簡體   English   中英

分發 python 代碼,里面有 python 避免安裝

[英]Distribute python code with python inside to avoid installation

我已經構建了一個捆綁的 Python 應用程序,它是一個已安裝(即“ *.exe ”,通過pyinstaller )和一個代碼(即“ *.py ”)部分的組合。 這是由於 package 不支持安裝,因此我必須直接從源代碼調用它。

我可以通過將我的環境包含在.\venv的捆綁包中並通過.\venv\Scripts\python.exe my_script.py運行代碼來分發和運行應用程序,但是它需要在機器上安裝 Python,從而引發錯誤否則

No Python at 'C:\Python38\python.exe' 

有沒有辦法在我的 package 中包含Python38文件夾,以允許任何人啟動應用程序,無論是否安裝了 Python(及其版本)? 我試圖:

  • 在 package 和.\venv\Scripts\中復制Python38文件夾,希望.\venv\Scripts\python.exe在查看C:\ -> 之前那里搜索
  • 在我的 package 中包含Python38並強制將其復制到C:\作為第一條指令->它有效,但它似乎是作弊,它可能會在收件人的計算機上搞砸

我設法以某種簡單的方式解決了這個問題:

  • 在我的 package 中包含Python38和我的venv (顯然,它們會導致目標文件夾的大小增加,但對我來說這不是一個大問題)
  • 更新.\venv\pyvenv.cfg在我的計算機上從絕對路徑更改為 Python 到目標文件夾內的相對路徑

這里是對更新后的pyvenv.cfg的引用:

home = .\Python38                          <-- updated: it was "C:\Python38"
implementation = CPython
version_info = 3.8.5.final.0
virtualenv = 20.4.7
include-system-site-packages = false
base-prefix = .\Python38                   <-- updated
base-exec-prefix = .\Python38              <-- updated
base-executable = .\Python38\python.exe    <-- updated

僅供參考,這里是我用來自動更新pyvenv.cfg的代碼,它適用於不同的 python 版本和路徑:

import os
import re
from configparser import ConfigParser

# Set original and updated config paths
venv_cfg = 'pyvenv.cfg'
in_venv_cfg = os.path.join('.', 'venv', venv_cfg)
out_venv_cfg = os.path.join('.', 'config', venv_cfg)  # changing folder to avoid override of venv config

# Parse data in config
with open(in_venv_cfg, 'r') as f:
    config_lines = f.readlines()
config = ConfigParser()
config.read_string('[cfg]\n' + ''.join(config_lines))

# Get python version and location
py_path = config.get('cfg', 'home')
py_dir, py_name = os.path.dirname(py_path), os.path.basename(py_path)

# Update paths to python and save venv configuration
new_config_lines = [re.sub(r'(=\s*)' + py_dir.replace("\\", r"\\") + f'({py_name})', r'\1.\\\2', line) for line in config_lines]
with open(out_venv_cfg, 'w') as f:
    f.writelines(new_config_lines)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM