1

所以我写了一堆我想在共享工作计算机上运行的 Python3 脚本。这台计算机上安装了 python2.7 和许多预定的 2.7 脚本,我必须确保这些脚本继续保持不变。所以我想了一种可移植或虚拟的 python3 环境,我可以只为我的脚本保留。

如果对我尝试过的事情或我没有考虑过的新方法进行了调整,那将不胜感激。也很抱歉发了很长的帖子,想具体一点。


我试过的:

1)安装可移植版本的python3(WinPython 3.7)。

然后在 .bat 文件中运行我的脚本:

SET PYTHONPATH = "C:\Localdata\...\WPy-3702\python-3.7.0.amd64\Lib\site-packages"
"C:\Localdata\...\WPy-3702\python-3.7.0.amd64\python.exe" test.py

其中 test.py 很简单:

import six
print(six.__file__)

现在这在我自己的笔记本电脑上工作正常,返回 winpython 站点包目录:

> C:\Localdata\...\WPy-3702\python-3.7.0.amd64\Lib\site-packages\six.py

但是,在上述所有条件相同的情况下,共享计算机将恢复为已安装的 2.7 库。

> C:\Program Files (x86)\Python27\lib\site-packages\six.py

这当然打破了它,似乎是我问题的根源。我检查过,winpython 站点包文件夹中有一个 Six.py。我尝试了不同版本/安装的 winpython,但没有成功。(理想情况下,如果有人在这里指出我缺少的一个简单命令可以解决这个问题,那就太好了。)

仅供参考,如果我从捆绑的“WinPython Command Prompt.exe”运行 python,它确实是 3.7 版,只是它不会使用本地 3.7 站点包库...

2) 安装 Anaconda3 而不是添加到 PATH。

安装完成,但我在开始菜单中只剩下 Anaconda Prompt(没有 jupyter、spyder 等),并且只要我尝试打开它,Anaconda Prompt 就会出错:

> 'C:\Users\...\anaconda3\Scripts\activate.bat' is not recognized as an 
internal or external command, operable program or batch file.

我在其他工作 PC 上遇到过这个问题,解决方案是删除默认 python 并重新安装 Anaconda,但正如我之前所说,我无法在不惹恼很多人的情况下触摸当前的 Py2 安装,所以另一个死胡同.

(尽管安装过程有些拙劣,但仍安装了 anaconda3 文件,因此我尝试了对 anaconda3 站点包相同的 test.py+batchfile 技巧,但效果相同)。

3)创建一个Venv:

好吧,我承认我在这里有点天真,如果我读到这个: Why virtualenv 在被拉出后依赖于全局python 而不是本地python?看起来我会遇到与上述相同的问题。

从我之前的帖子如何在别人的 Windows 机器上的虚拟环境中本地运行 python 脚本并让它始终如一地工作?使用 pyinstaller 的答案一次性有用,但我现在想在同一台计算机上运行很多脚本,所以每个脚本 500MB+ 的包太麻烦了。

4

2 回答 2

1

选项3,virtualenv是我会去的。很高兴您能够从@Declan 的评论中设置环境变量,但我认为即使您没有 python 版本问题,使用 virtualenv 也是一个不错的主意。它使您的全局 python 环境保持清洁,可以启用一种供应商,等等。

要设置新 virtualenv 的 python 版本,请使用该-p标志。

无关说明:Python 2 将于 2020 年弃用。

于 2018-11-01T01:47:15.507 回答
1

使用 set 命令时。您在等号之前使用的任何空格都是变量名本身的一部分。因此,如果您想使用该变量,则必须%myvar %在末尾使用空格来引用它。

将引号分配给变量也不是最佳实践。您可以使用它们来保护变量值中的特殊字符,它还有助于避免变量值末尾的尾随空格。

 SET "PYTHONPATH=C:\Localdata\...\WPy-3702\python-3.7.0.amd64\Lib\site-packages"
于 2018-11-01T01:48:57.870 回答