CARVIEW |
Select Language
HTTP/2 200
date: Thu, 31 Jul 2025 15:20:49 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"c379e8c52631dd0c2766902f54fb70e2"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=pSRTxBpa28l6bRcgFsvaw3rAJ68YLPnBxPq1P%2FAq9dxITNa6qzgOzlIbOukHP3RrUwxEhnrmrWPwmXk6G%2BOl66UKk6A6noPDyjEBBzIG%2BLyn2M5ar%2FMasm1xZvN6jalI%2FvZZ1H8FeRBHQ70df7g1YgJAZH%2F%2BzWE0cy6LoII1Zmn9bM3lpzZkH%2FuVnypZQ59zrPCCyYn86UE0QkqXKVjvuSQ9Z6oauTuZ3OcCmQCOmwgj8wZRx3rIfxXxaUyIyILD5TMKbGphTT4RgSNO%2FfuVJg%3D%3D--8pDUe85g9L9StJsa--3UGB%2FOgpS%2BF%2Bd%2Bv6aXwtQg%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.2073599972.1753975249; Path=/; Domain=github.com; Expires=Fri, 31 Jul 2026 15:20:49 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Fri, 31 Jul 2026 15:20:49 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: C9A8:1EF490:C76F65:EB2CF6:688B89D1
Troubleshooting Python.NET initialization problems (.NET Core) with virtual environments · GitHub
Show Gist options
Save AMArostegui/9b2ecf9d87042f2c119e417b4e38524b to your computer and use it in GitHub Desktop.
{{ message }}
Instantly share code, notes, and snippets.
Last active
January 26, 2024 08:40
-
Star
1
(1)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save AMArostegui/9b2ecf9d87042f2c119e417b4e38524b to your computer and use it in GitHub Desktop.
Troubleshooting Python.NET initialization problems (.NET Core) with virtual environments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static void Init(string pathVirtualEnv) | |
{ | |
string pathVeScripts; | |
if (Environment.OSVersion.Platform == PlatformID.Win32NT) | |
pathVeScripts = PathVirtualEnv + @"\Scripts"; | |
else | |
pathVeScripts = PathVirtualEnv + @"/bin"; | |
Environment.SetEnvironmentVariable("PATH", pathVeScripts, EnvironmentVariableTarget.Process); | |
var pythonPath = string.Empty; | |
var proc = new Process(); | |
proc.StartInfo.FileName = pathVeScripts + Path.DirectorySeparatorChar + "python"; | |
proc.StartInfo.Arguments = $"-c \"import sys; print('{Path.PathSeparator}'.join(sys.path))\""; | |
proc.StartInfo.RedirectStandardOutput = true; | |
if (!proc.Start()) | |
throw new Exception("Couldn't initialize Python in virtual environment"); | |
proc.WaitForExit(); | |
pythonPath = proc.StandardOutput.ReadToEnd(); | |
pythonPath = pythonPath.Replace(Environment.NewLine, ""); | |
if (string.IsNullOrEmpty(pythonPath)) | |
throw new Exception("Couldn't initialize Python.NET"); | |
Environment.SetEnvironmentVariable("PYTHONPATH", pythonPath, EnvironmentVariableTarget.Process); | |
PythonEngine.PythonPath = pythonPath; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can’t perform that action at this time.
I'm using Python.NET to develop a .NET library that relies on a well known Python project.
The code has to run on a Linux server, so I've chosen .NET Core.
Sadly, I couldn't get the runtime to work using a virtual environment, as shown in the project tutorial
My setup
%PATH%
)%LOCALAPPDATA%\Programs
%PATH%
) to create virtual environments using a specific Python version for each project.1) The runtime is unable to find Python DLL
First, the required DLLs are not found in the virtual environment folders
To create a venv using Python 3.6 with this command
py -3.6 -m venv venv36
copies all DLLs to venv36\Scripts folderIf we try the same with Python 3.7
py -3.7 -m venv venv37
it does not copy the dynamic libraries.I didn't go much deeper with this. It might be bug 3942 or not, but I decided to copy the binaries manually.
Then, I had to set the process
%PATH%
to the location of the dynamic library, for the runtime to find the DLL.2) The runtime is unable to find the standard library and/or the venv modules
I went for a quick workaround rather than properly debugging Python.NET.
The normal activation of the virtualenv works sucesfully, I guess that means
sys.path
is properly build. So I decided to run a process to cache its CPython intepreter initialization and then manually recreating the variable it when launching the .NET runtime.This is done by printing
sys.path
to stdout and redirecting the standard output to a .NET string. Then I just initialize%PYTHONPATH%
environment variable and let the runtime correctly initializes the list.This seems to work for Windows (with and without a system-wide Python) and Ubuntu Linux with a system Python3.
The initialization code is as shown in pythondotnetinit.cs