Einführung
Das Migrieren einer project zu einer neuen Programmiersprache kann eine schwierige und zeitaufwendige Aufgabe sein. GitHub Copilot kann Ihnen bei diesem Prozess helfen, indem GitHub Copilot die Änderungen erläutert, die Sie vornehmen müssen, und Ersatzcode in der neuen Sprache vorschlägt.
Prinzipien der Umstellung eines Projekts auf eine neue Sprache
Berücksichtige die folgenden Punkte, bevor du einen Migrationsprozess startest:
-
Programmierkenntnisse
Stelle sicher, dass du mit beiden Programmiersprachen bestens vertraut bist. Obwohl Copilot Code für Sie übersetzen kann, müssen Sie die Vorschläge verstehen, die es macht, und entscheiden, ob Sie sie nutzen oder um einen alternativen Vorschlag bitten möchten.
-
Kenntnisse über das System, das Sie migrieren
Stelle sicher, dass du neben den für Benutzende zur Verfügung stehenden Funktionen und Features auch die Architektur und Logik des aktuellen Systems verstehst. Du musst überprüfen können, ob der übersetzte Code all die entsprechenden Vorgänge wie der ursprüngliche Code ausführt und dieselben Ergebnisse generiert.
-
Verwenden von KI als Hilfe
Wenn Sie einen bestimmten Teil des Codes, den Sie gerade übersetzen möchten, nicht verstehen, verwenden Sie die „Erklären“-Funktion von Copilot, entweder für die gesamte Datei oder für einen ausgewählten Codeabschnitt innerhalb einer Datei. Siehe Fragen an GitHub Copilot in Ihrer IDE stellen.
-
Zeitplan für Abschluss der Migration
Die Konvertierung ist ein mehrstufiger Prozess. Je größer das Projekt, das Sie konvertieren, desto mehr Schritte müssen Sie ausführen. Stelle sicher, dass du genügend Zeit hast, um den gesamten Prozess abzuschließen.
-
Iteratives Arbeiten
Zielen Sie darauf ab, diskrete Teile Ihres Projekts separat umzuwandeln. Stellen Sie sicher, dass Sie alle vorgenommenen Änderungen überprüft haben, bevor Sie zu einem anderen Teil des Projekts wechseln. Schreiben Sie Tests für die einzelnen Teile der project, während Sie fortfahren, damit Sie bestätigen können, dass jede der neuen Komponenten wie erwartet funktioniert.
-
Vermeiden von Komplexität im Prozess
Zunächst solltest du eine gleichwertige Konvertierung durchführen. Dies ist für den gesamten Code in Ihrem project nicht möglich. Um zusätzliche Komplexität bei der Migrationsaufgabe zu vermeiden, solltest du jedoch versuchen, die Anzahl der neuen eingeführten Änderungen einzuschränken, die sich nicht auf das Übersetzen des Codes und die Verwendung eines neuen Frameworks und der entsprechenden Abhängigkeiten beziehen.
-
Benchmarken und Refaktorisieren des übersetzten Codes
Nachdem du die erste Konvertierung abgeschlossen hast und über ein funktionierendes System verfügst, kannst du Benchmarkingvorgänge ausführen, um das alte und das neue System zu vergleichen. Du kannst den Code jetzt in der neuen Sprache umgestalten. Dies ist eine Möglichkeit, den Code zu optimieren und technische Schulden zu reduzieren.
Verwenden Copilot , um Ihnen bei der Migration eines Projekts in eine neue Sprache zu helfen
Vorausgesetzt, Sie haben sich bereits mit dem vorhandenen Projekt vertraut gemacht, beginnt man eine Migration am besten damit, einen Branch des Repositorys in Ihrem Editor zu öffnen und Copilot um Hilfe zu bitten.
-
Öffnen Sie im Editor den Copilot-Chat Bereich. Siehe Fragen an GitHub Copilot in Ihrer IDE stellen.
-
Bitten Sie Copilot , die Schritte zu skizzieren, die Sie ausführen müssen, um das Projekt in die neue Sprache zu migrieren.
Für die Migration von PHP zu Python könntest du beispielsweise Folgendes fragen:
Copilot prompt @workspace I want to migrate this project from PHP to Python. Give me a high-level overview of the steps I need to take. Don't go into detail at this stage.
@workspace I want to migrate this project from PHP to Python. Give me a high-level overview of the steps I need to take. Don't go into detail at this stage.Hinweis
Der Chatteilnehmer
@workspacelegt die Dateien im aktuellen Arbeitsbereich als Kontext für die Frage fest, die du stellst.
Copilot liefert in der Regel eine Liste mit den Schritten zurück, die Sie ausführen müssen, um das Projekt zu migrieren.
-
Kopieren Sie die Antwort von Copilot und speichern Sie sie irgendwo, damit Sie während des gesamten Prozesses darauf zurückgreifen können.
-
Gehen Sie jeden Schritt des Prozesses durch und bitten Sie Copilot bei Bedarf um ausführliche Hilfe.
Berücksichtigen Sie jeden Vorschlag von Copilot sorgfältig. Stellen Sie sicher, dass Sie den Code verstehen, den er vorschlägt, und bewerten Sie, ob er für Ihre project geeignet ist. Wenn Sie nicht sicher sind, bitten Sie Copilot , den Code Ihnen zu erklären.
Wenn Sie denken, dass eine änderung, die Copilot vorgeschlagen wird, nicht in irgendeiner Weise richtig ist, bitten Sie um einen alternativen Vorschlag.
-
Sobald du einen Punkt im Migrationsprozess für die Komponente erreicht hast, an dem sie ausgeführt werden kann, kannst du überprüfen, ob sie wie erwartet funktioniert. Wenn ein Fehler auftritt, kopieren Sie den Fehler in der Copilot-Chat-Ansicht, und bitten Sie Copilot, Ihnen bei der Behebung des Fehlers zu helfen.
-
Nachdem Sie die anfängliche Konvertierung abgeschlossen haben, verwenden Sie Copilot, um den Code in der neuen Sprache zu refaktorieren. Weitere Informationen finden Sie unter Umgestalten von Code mit GitHub Copilot.
Beispiel: Migrieren eines PHP-project zu Python
Im folgenden Beispiel wird die Migration einer einfachen Webanwendung von PHP zu Python beschrieben. Auch wenn dies nicht die Programmiersprachen sind, die Sie für Ihre Migration verwenden, ist es möglicherweise hilfreich, zusammen mit den hier beschriebenen Schritten zu folgen, um sich mit einer project Migration vertraut zu machen. Die Schritte sind für die Migration anderer kleiner Projekte von einer Sprache zu einer anderen ähnlich.

In diesem Beispiel wird von Folgendem ausgegangen:
- Sie arbeiten in Visual Studio Code.
- Du hast beide Sprachen installiert: PHP und Python-Version 3.12 oder höher.
Migrieren eines einfachen Website-Projekts
Wir werden den Code in diesem öffentlichen Repository auf GitHub: docs/simple-php-website migrieren.
Das Repository besteht aus den folgenden Dateien.
.gitignore
.htaccess
LICENSE
content
├── 404.phtml
├── about-us.phtml
├── contact.phtml
├── home.phtml
└── products.phtml
includes
├── config.php
└── functions.php
index.php
readme.md
template
├── style.css
└── template.php
In diesem Beispiel werden die Eingabeaufforderungen angezeigt, die Sie eingeben Copilot-Chat können, um die Migration abzuschließen, und die antworten Copilot , die für eine Instanz dieser Migration zurückgegeben werden. Das GPT-4.1 Modell wurde verwendet, um diese Antworten zu generieren. Copilot-Chat Antworten sind nicht deterministisch, daher erhalten Sie wahrscheinlich leicht unterschiedliche Antworten auf die hier gezeigten Antworten.
Während eines Migrationsprozesses werden wahrscheinlich Fehler angezeigt, die du beheben musst, bevor du fortfährst. Copilot kann Ihnen dabei helfen. Das Beispiel enthält einige Fehler und zeigt, wie Sie diese mithilfe von Copilot beheben können.
Da die Antworten, die Sie von Copilot-Chat erhalten, wahrscheinlich von den hier gezeigten abweichen, können Ihnen andere Fehler begegnen. Sie werden es daher möglicherweise einfacher finden, diese Beispielmigration anhand der hier gezeigten Antworten nachzuvollziehen, statt der Antworten, die Sie selbst von Copilot erhalten.
Nach Abschluss dieser Beispielmigration können Sie dann die gleiche Methode auf eigene project anwenden.
-
Klone zunächst eine Kopie des Repositorys auf deinen lokalen Computer.
-
Führe die Anwendung aus, um zu überprüfen, ob sie funktioniert.
Um dies zu tun, öffnen Sie ein Terminal und navigieren Sie zum Wurzelverzeichnis des geklonten Repositories und führen Sie den folgenden Befehl aus.
Shell php -S localhost:8000
php -S localhost:8000Wechsle dann in einem Browser zu http://localhost:8000.
-
Navigiere auf der Website, um dich mit ihr vertraut zu machen, sodass du überprüfen kannst, ob die Migration erfolgreich war.
-
Erstellen Sie eine Arbeitszweigstelle in Ihrem Repository, und öffnen Sie sie als neuen Arbeitsbereich in Visual Studio Code.
-
Machen Sie sich mit den Inhalten und der Architektur des vorhandenen Projekts vertraut. Copilot kann Ihnen dabei helfen:
-
Öffnen Sie die Copilot-Chat Ansicht.
-
Gib einen Prompt wie den folgenden ein:
Copilot prompt @workspace Describe this project in detail, explaining what the various components do and how they interact.
@workspace Describe this project in detail, explaining what the various components do and how they interact.
-
-
Bitten Sie Copilot um einen allgemeinen Überblick über den Migrationsprozess:
Copilot prompt @workspace I want to migrate this project from PHP to Python. Give me a high-level overview of the steps I need to take. Don't go into detail at this stage.
@workspace I want to migrate this project from PHP to Python. Give me a high-level overview of the steps I need to take. Don't go into detail at this stage.
Copilot antwortet mit Anweisungen wie:
To migrate this project from PHP to Python, follow these high-level steps:
1. Set Up Python Environment:
- Install Python and set up a virtual environment.
- Install necessary packages (e.g., Flask for web framework).
2. Convert Configuration:
- Translate the configuration settings from config.php to a Python configuration file.
3. Rewrite Functions:
- Convert PHP functions in functions.php to Python functions.
4. Create Flask Application:
- Set up a Flask application to handle routing and views.
- Map the routes to corresponding views.
5. Convert Templates:
- Translate template.php to a Jinja2 template.
- Update the CSS file path in the template.
6. Convert Content Pages:
- Convert .phtml content files to HTML or Jinja2 templates.
7. Update .htaccess Rules:
- Translate .htaccess rewrite rules to Flask route handling.
8. Run and Test:
- Run the Flask application and test all routes and functionalities.
- Ensure the site works as expected and fix any issues.
9. Documentation:
- Update the readme.md with new instructions for running the Python project.
-
Kopieren Sie Copilots Antwort und speichern Sie sie an einem Ort, auf den Sie im weiteren Verlauf dieses Prozesses zurückgreifen können. Sie gehen diese Schritte nacheinander durch und bitten Copilot dabei um Hilfe.
-
Wenn Sie noch nicht entschieden haben, welches Python Framework Sie verwenden möchten, können Sie nach Rat fragenCopilot:
Copilot prompt @workspace What Python frameworks can I use for this project once it is migrated to Python? Give me a selection of options, with a brief summary of the pros and cons of each in relation to this website project. Which framework would you recommend?
@workspace What Python frameworks can I use for this project once it is migrated to Python? Give me a selection of options, with a brief summary of the pros and cons of each in relation to this website project. Which framework would you recommend?
Copilot antwortet mit Informationen zu verschiedenen Frameworks und schließt:
For a project like yours - which is a simple, content-driven website - Flask is highly recommended. Its simplicity, flexibility, and ease of use (especially with its templating system that can easily replace your current PHP template structure) make it a great fit.
Wir folgen dem Rat von Copilot und verwenden Flask.
-
Wenn Sie zur Copilotallgemeinen Übersicht zurückkehren, besteht der erste Schritt darin, eine Python Umgebung einzurichten und die erforderlichen Pakete zu installieren. Um herauszufinden, wie dies geht, geben Sie in Copilot-Chat Folgendes ein:
Copilot prompt @workspace I want to use Flask. Tell me how to set up a virtual environment and install the necessary packages.
@workspace I want to use Flask. Tell me how to set up a virtual environment and install the necessary packages.
Copilot antwortet mit Anweisungen wie:
1. Create a virtual environment:
- Open a terminal and navigate to your project directory.
- Run the following command to create a virtual environment:
python3 -m venv venv
2. Activate the virtual environment:
- On macOS and Linux:
source venv/bin/activate
- On Windows:
venv\Scripts\activate
3. Install Flask and necessary packages:
- With the virtual environment activated, run the following command
to install Flask and other necessary packages:
pip install Flask
4. Verify the installation:
- You can verify that Flask is installed by running:
pip list
-
Befolgen Sie Copilots Anweisungen und verwenden Sie
pip list, um zu überprüfen, ob Flask installiert ist. -
Wenn Sie zur CopilotÜbersicht über den Migrationsprozess zurückkehren, besteht der nächste Schritt darin, die Konfiguration zu konvertieren. Fragen Sie Copilot dabei um Hilfe. Zum Beispiel:
Copilot prompt @workspace As the first step in migrating this project from PHP to Python, create a Python configuration file by converting the functions in functions.php to Python functions. Tell me where to locate the Python config file in the project.
@workspace As the first step in migrating this project from PHP to Python, create a Python configuration file by converting the functions in functions.php to Python functions. Tell me where to locate the Python config file in the project.
Copilot schlägt vor, dass Sie im Verzeichnis includes eine Datei namens config.py erstellen, die den folgenden Code enthält.
config = {
'name': 'Simple Python Website',
'site_url': '',
'pretty_uri': False,
'nav_menu': {
'': 'Home',
'about-us': 'About Us',
'products': 'Products',
'contact': 'Contact',
},
'template_path': 'template',
'content_path': 'content',
'version': 'v3.1',
}
def get_config(key=''):
return config.get(key, None)
def site_name():
return get_config('name')
def site_url():
return get_config('site_url')
def site_version():
return get_config('version')
def nav_menu(sep=' | '):
nav_menu = ''
nav_items = get_config('nav_menu')
for uri, name in nav_items.items():
query_string = request.args.get('page', '')
class_active = ' active' if query_string == uri else ''
url = f"{get_config('site_url')}/{'' if get_config('pretty_uri') or uri == '' else '?page='}{uri}"
nav_menu += f'<a href="{url}" title="{name}" class="item{class_active}">{name}</a>{sep}'
return nav_menu.strip(sep)
def page_title():
page = request.args.get('page', 'Home')
return ' '.join(word.capitalize() for word in page.split('-'))
def page_content():
page = request.args.get('page', 'home')
path = os.path.join(os.getcwd(), get_config('content_path'), f'{page}.phtml')
if not os.path.exists(path):
path = os.path.join(os.getcwd(), get_config('content_path'), '404.phtml')
with open(path, 'r') as file:
return file.read()
def init():
template_path = os.path.join(get_config('template_path'), 'template.html')
with open(template_path, 'r') as file:
return file.read()
config = {
'name': 'Simple Python Website',
'site_url': '',
'pretty_uri': False,
'nav_menu': {
'': 'Home',
'about-us': 'About Us',
'products': 'Products',
'contact': 'Contact',
},
'template_path': 'template',
'content_path': 'content',
'version': 'v3.1',
}
def get_config(key=''):
return config.get(key, None)
def site_name():
return get_config('name')
def site_url():
return get_config('site_url')
def site_version():
return get_config('version')
def nav_menu(sep=' | '):
nav_menu = ''
nav_items = get_config('nav_menu')
for uri, name in nav_items.items():
query_string = request.args.get('page', '')
class_active = ' active' if query_string == uri else ''
url = f"{get_config('site_url')}/{'' if get_config('pretty_uri') or uri == '' else '?page='}{uri}"
nav_menu += f'<a href="{url}" title="{name}" class="item{class_active}">{name}</a>{sep}'
return nav_menu.strip(sep)
def page_title():
page = request.args.get('page', 'Home')
return ' '.join(word.capitalize() for word in page.split('-'))
def page_content():
page = request.args.get('page', 'home')
path = os.path.join(os.getcwd(), get_config('content_path'), f'{page}.phtml')
if not os.path.exists(path):
path = os.path.join(os.getcwd(), get_config('content_path'), '404.phtml')
with open(path, 'r') as file:
return file.read()
def init():
template_path = os.path.join(get_config('template_path'), 'template.html')
with open(template_path, 'r') as file:
return file.read()
-
Erstelle die
includes/config.py-Datei, und lösche die vorhandeneincludes/config.php-Datei. -
Kehren Sie wieder zur Übersicht zurück und bitten Sie Copilot, Ihnen beim Neuschreiben der PHP-Funktionen zu helfen.
Copilot prompt @workspace Continuing the migration of this project from PHP to Python, create Python functions to replace the existing PHP functions. Tell me where to locate the Python functions in the project.
@workspace Continuing the migration of this project from PHP to Python, create Python functions to replace the existing PHP functions. Tell me where to locate the Python functions in the project.
Copilot schlägt vor, im Verzeichnis includes eine Datei namens functions.py zu erstellen, die den folgenden Code enthält.
import os
from flask import request
from .config import get_config
def site_name():
return get_config('name')
def site_url():
return get_config('site_url')
def site_version():
return get_config('version')
def nav_menu(sep=' | '):
nav_menu = ''
nav_items = get_config('nav_menu')
for uri, name in nav_items.items():
query_string = request.args.get('page', '')
class_active = ' active' if query_string == uri else ''
url = f"{get_config('site_url')}/{'' if get_config('pretty_uri') or uri == '' else '?page='}{uri}"
nav_menu += f'<a href="{url}" title="{name}" class="item{class_active}">{name}</a>{sep}'
return nav_menu.strip(sep)
def page_title():
page = request.args.get('page', 'Home')
return ' '.join(word.capitalize() for word in page.split('-'))
def page_content():
page = request.args.get('page', 'home')
path = os.path.join(os.getcwd(), get_config('content_path'), f'{page}.phtml')
if not os.path.exists(path):
path = os.path.join(os.getcwd(), get_config('content_path'), '404.phtml')
with open(path, 'r') as file:
return file.read()
def init():
template_path = os.path.join(get_config('template_path'), 'template.html')
with open(template_path, 'r') as file:
return file.read()
import os
from flask import request
from .config import get_config
def site_name():
return get_config('name')
def site_url():
return get_config('site_url')
def site_version():
return get_config('version')
def nav_menu(sep=' | '):
nav_menu = ''
nav_items = get_config('nav_menu')
for uri, name in nav_items.items():
query_string = request.args.get('page', '')
class_active = ' active' if query_string == uri else ''
url = f"{get_config('site_url')}/{'' if get_config('pretty_uri') or uri == '' else '?page='}{uri}"
nav_menu += f'<a href="{url}" title="{name}" class="item{class_active}">{name}</a>{sep}'
return nav_menu.strip(sep)
def page_title():
page = request.args.get('page', 'Home')
return ' '.join(word.capitalize() for word in page.split('-'))
def page_content():
page = request.args.get('page', 'home')
path = os.path.join(os.getcwd(), get_config('content_path'), f'{page}.phtml')
if not os.path.exists(path):
path = os.path.join(os.getcwd(), get_config('content_path'), '404.phtml')
with open(path, 'r') as file:
return file.read()
def init():
template_path = os.path.join(get_config('template_path'), 'template.html')
with open(template_path, 'r') as file:
return file.read()
-
Erstelle die
includes/functions.py-Datei, und lösche die vorhandeneincludes/functions.php-Datei. -
Der nächste Schritt in der Übersicht besteht darin, eine Flask-Anwendung zu erstellen. Bitten Sie Copilot, Ihnen dabei zu helfen:
Copilot prompt @workspace Set up a Flask application to handle routing and views, and map the routes to corresponding views. Tell me the location of any files that need to be created or changed.
@workspace Set up a Flask application to handle routing and views, and map the routes to corresponding views. Tell me the location of any files that need to be created or changed.
Copilot schlägt vor, im Stammverzeichnis des Projekts eine Datei mit dem Namen app.py zu erstellen, die den folgenden Code enthält.
from flask import Flask, render_template, request
import os
app = Flask(__name__)
config = {
'name': 'Simple Python Website',
'site_url': '',
'pretty_uri': False,
'nav_menu': {
'': 'Home',
'about-us': 'About Us',
'products': 'Products',
'contact': 'Contact',
},
'template_path': 'template',
'content_path': 'content',
'version': 'v3.1',
}
def get_config(key=''):
return config.get(key, None)
@app.route('/')
@app.route('/<page>')
def index(page='home'):
page_content = get_page_content(page)
page_title = get_page_title(page)
nav_menu = get_nav_menu()
return render_template('template.html', page_title=page_title, page_content=page_content, nav_menu=nav_menu)
def get_page_title(page):
return ' '.join(word.capitalize() for word in page.split('-'))
def get_page_content(page):
path = os.path.join(os.getcwd(), get_config('content_path'), f'{page}.phtml')
if not os.path.exists(path):
path = os.path.join(os.getcwd(), get_config('content_path'), '404.phtml')
with open(path, 'r') as file:
return file.read()
def get_nav_menu(sep=' | '):
nav_menu = ''
nav_items = get_config('nav_menu')
for uri, name in nav_items.items():
query_string = request.args.get('page', '')
class_active = ' active' if query_string == uri else ''
url = f"{get_config('site_url')}/{'' if get_config('pretty_uri') or uri == '' else '?page='}{uri}"
nav_menu += f'<a href="{url}" title="{name}" class="item{class_active}">{name}</a>{sep}'
return nav_menu.strip(sep)
if __name__ == '__main__':
app.run(debug=True)
from flask import Flask, render_template, request
import os
app = Flask(__name__)
config = {
'name': 'Simple Python Website',
'site_url': '',
'pretty_uri': False,
'nav_menu': {
'': 'Home',
'about-us': 'About Us',
'products': 'Products',
'contact': 'Contact',
},
'template_path': 'template',
'content_path': 'content',
'version': 'v3.1',
}
def get_config(key=''):
return config.get(key, None)
@app.route('/')
@app.route('/<page>')
def index(page='home'):
page_content = get_page_content(page)
page_title = get_page_title(page)
nav_menu = get_nav_menu()
return render_template('template.html', page_title=page_title, page_content=page_content, nav_menu=nav_menu)
def get_page_title(page):
return ' '.join(word.capitalize() for word in page.split('-'))
def get_page_content(page):
path = os.path.join(os.getcwd(), get_config('content_path'), f'{page}.phtml')
if not os.path.exists(path):
path = os.path.join(os.getcwd(), get_config('content_path'), '404.phtml')
with open(path, 'r') as file:
return file.read()
def get_nav_menu(sep=' | '):
nav_menu = ''
nav_items = get_config('nav_menu')
for uri, name in nav_items.items():
query_string = request.args.get('page', '')
class_active = ' active' if query_string == uri else ''
url = f"{get_config('site_url')}/{'' if get_config('pretty_uri') or uri == '' else '?page='}{uri}"
nav_menu += f'<a href="{url}" title="{name}" class="item{class_active}">{name}</a>{sep}'
return nav_menu.strip(sep)
if __name__ == '__main__':
app.run(debug=True)
Copilot schlägt außerdem vor, die Datei so umzubenennen template/template.php``template/template.html und zu aktualisieren, dass die Jinja2-Vorlagensyntax verwendet wird:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>{{ page_title }} | {{ get_config('name') }}</title>
<link href="{{ get_config('site_url') }}/template/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="wrap">
<header>
<h1>{{ get_config('name') }}</h1>
<nav class="menu">
{{ nav_menu|safe }}
</nav>
</header>
<article>
<h2>{{ page_title }}</h2>
{{ page_content|safe }}
</article>
<footer>
<small>©{{ get_config('version') }} {{ get_config('name') }}.<br>{{ get_config('version') }}</small>
</footer>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>{{ page_title }} | {{ get_config('name') }}</title>
<link href="{{ get_config('site_url') }}/template/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="wrap">
<header>
<h1>{{ get_config('name') }}</h1>
<nav class="menu">
{{ nav_menu|safe }}
</nav>
</header>
<article>
<h2>{{ page_title }}</h2>
{{ page_content|safe }}
</article>
<footer>
<small>©{{ get_config('version') }} {{ get_config('name') }}.<br>{{ get_config('version') }}</small>
</footer>
</div>
</body>
</html>
-
Erstelle die Dateien
app.pyundtemplate/template.htmlwie vorgeschlagen. -
Copilot kann auch vorschlagen, dass Sie nach dem Erstellen dieser Dateien nun
python app.pyim Terminal im Stammverzeichnis des Repositorys ausführen und anschließend http://127.0.0.1:5000 im Browser aufrufen.Hinweis
In Abhängigkeit von der Installation von Python auf deinem Computer musst du den Befehl
python3 app.pyanstelle vonpython app.pyverwenden, um sicherzustellen, dass die richtige Python-Version verwendet wird.Hierbei werden Fehlermeldungen im Browser angezeigt.
-
Kopieren Sie die anfängliche
TemplateNotFoundFehlermeldung in die Copilot-Chat Ansicht, und fragen Sie, wie Sie dies beheben können. Zum Beispiel:Copilot prompt @workspace When I run `python3 app.py`, I get the following error in the browser: `jinja2.exceptions.TemplateNotFound: template.html`. How can I fix this?
@workspace When I run `python3 app.py`, I get the following error in the browser: `jinja2.exceptions.TemplateNotFound: template.html`. How can I fix this?
Copilot Antwortet, dass der Fehler angibt, dass Flask die template.html Datei nicht finden kann.
Es teilt Ihnen mit, dass Flask standardmäßig nach Vorlagen in einem Ordner mit dem Namen templates im Stammverzeichnis Ihrer project sucht. Deine template.html-Datei befindet sich jedoch im template-Verzeichnis. Um dieses Problem zu beheben, musst du beim Erstellen der Flask-App den richtigen Vorlagenordner angeben. Das Tool empfiehlt, deine app.py-Datei zu aktualisieren und die Zuweisung app = Flask(__name__) so zu ändern, dass sie den template_folder-Parameter enthält:
app = Flask(__name__, template_folder='template')
app = Flask(__name__, template_folder='template')
-
Angenommen, der Flask-Entwicklungsserver läuft noch, wenn du die Browserseite unter http://127.0.0.1:5000/ aktualisierst, wird nun ein neuer Fehler im Zusammenhang mit der
get_config-Funktion angezeigt.Kopieren Sie diese Fehlermeldung in die Copilot-Chat Ansicht, und bitten Sie um Hilfe.
Copilot prompt @workspace When I run `python3 app.py`, I get the following error in the browser: `jinja2.exceptions.UndefinedError: 'get_config' is undefined.` How can I fix this?
@workspace When I run `python3 app.py`, I get the following error in the browser: `jinja2.exceptions.UndefinedError: 'get_config' is undefined.` How can I fix this?
Copilot antwortet, dass der Fehler auftritt, weil get_config im Jinja2-Vorlagenkontext nicht verfügbar ist. Du erhältst die Empfehlung, direkt vor der Zeile app.py den folgenden Code zur @app.route('/')-Datei hinzuzufügen:
app.jinja_env.globals.update(get_config=get_config)
app.jinja_env.globals.update(get_config=get_config)
-
Aktualisiere deinen Browser. Daraufhin sollte die Website angezeigt werden.

Es werden jedoch keine CSS-Formatvorlagen angewendet. Dieses Problem wird als Nächstes behoben.
-
Fragen Sie Copilot:
Copilot prompt @workspace The deployed website does not use the CSS styles. How can I fix this?
@workspace The deployed website does not use the CSS styles. How can I fix this?
Copilot teilt Ihnen mit, dass Flask erwartet, dass sich Ihre CSS-Datei in einem Verzeichnis mit dem Namen static befindet. Das Tool schlägt vor, die vorhandene style.css-Datei aus dem template-Verzeichnis in ein neues static-Verzeichnis zu verschieben und anschließend den Pfad zur style.css-Datei innerhalb des head-Teils der template.html-Datei zu aktualisieren. Nimm die folgende Änderung vor:
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
Wenn du den Browser aktualisierst, sollte die Website jetzt ordnungsgemäß gerendert werden.
Um die erste Migration abzuschließen, arbeiten Sie mit den Schritten in der allgemeinen Übersicht fort, die Copilot Sie erhalten haben, und bitten Sie bei Bedarf um Hilfe.
Abschließen der Migration
Um den Migrationsprozess erfolgreich abzuschließen, sind die folgenden Schritte erforderlich:
- Sorgfältiges Überprüfen der anfänglichen Migration
- Bugbehebung Im hier beschriebenen Beispiel funktionieren die Seitenlinks beispielsweise nur, wenn du im
pretty_uri-Abschnitt derTrue-Dateiconfigaufapp.pyfestlegst. Wenn Sie die Möglichkeit haben möchten, Query-String-Parameter in Seiten-URLs zu verwenden, oder wenn Sie diese Option aus dem Code entfernen möchten, können Sie Copilot bitten, Ihnen dabei zu helfen. - Tests schreiben für das migrierte Projekt.
- Bereinigung des Projekts, indem alle nicht mehr benötigten Dateien entfernt werden.
- Umgestalten des Codes in der neuen Sprache. Der Migrationsprozess hat zu einem Python-project geführt, dessen Architektur auf dem ursprünglichen PHP-project basiert. Nachdem du die anfängliche Migration durchgeführt hast, kannst du jetzt den Code umgestalten, um die Features der Python-Sprache und des Flask-Frameworks optimal zu nutzen.
- Aktualisieren der Dokumentation: Die
readme.md-Datei ist jetzt veraltet und muss neu geschrieben werden.