嵌入式环境下Python home和sys.prefix的正确设置

Dan*_*ens 9 python cpython

现在的情况

我将 Python 嵌入到我的 C++ 应用程序中。该应用程序被安装到Mac系统(在Windows上常见的应用场所C:\Program Files/Applications/...),这需要管理员权限才能进行修改,这些目录。我的应用程序还附带了自己的 Python 安装。以下是包装结构的示例:

C:\Program Files\Foo\foo.exe
C:\Program Files\Foo\Lib
C:\Program Files\Foo\DLLs
C:\Program Files\Foo\python.exe
Run Code Online (Sandbox Code Playgroud)

该程序还设置了一个额外的用户特定目录,该目录不需要任何权限,位于sys.path

C:\Users\username\AppData\Roaming\Foo\python\libs
Run Code Online (Sandbox Code Playgroud)

问题

在初始化过程中我叫PySet_PathPy_SetPythonHome我一套sys.prefixProgram Files\Foo所要求的文件

如果用户pip通过 pip安装或模块,它最终会出现在这个应用程序目录中,这当然需要提升的权限。但是pip install something --user需要找到一个用户友好的安装目录(在我的例子中是 AppData 目录)。

我的问题是,我应该设置哪些值和组合来使用--user?是否建议将 Python 主目录设置为 AppData 目录和sys.prefixProgram Files 目录?

因为,这意味着用户可以--user用来控制某些文件的安装位置

C:\Program Files\Foo\python.exe -m pip install xyz --user
would go into the user directory

C:\Program Files\Foo\python.exe -m pip install xyz
would go into the Program Files directory
Run Code Online (Sandbox Code Playgroud)

这是推荐的,还是我在这里监督任何副作用?

小智 2

我之前将 python 解释器嵌入到 Java 应用程序中。我使用虚拟环境来管理事物。这给了对包和事情最终结果的很多控制。

本质上,您可以在系统中拥有某些内容和/或在 virtualenv 中覆盖它们。如果需要,您可以为每个用户创建 virtualenv。

有关更多信息,请参阅此处:

https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/