将完整的virtualenv复制到另一台电脑

时间:2016-01-25 12:55:52

标签: python copy pip virtualenv

virtualenv位于/home/user/virtualenvs/Environment。现在我需要在另一台PC上使用这个环境。所以我安装了virtualenv-clone并用它来克隆/Environment。然后我通过USB将其复制到另一台PC。我可以使用source activate激活它,但是当我尝试使用sudo ./Environment/bin/python启动python解释器时,我得到了

./bin/python: 1: ./bin/python: Syntax Error: "(" unexpected

没有sudo执行它会给我一个错误,告诉我二进制格式有错误。 但这怎么可能呢?我刚刚复制了它。或者有更好的方法吗?我不能只使用pip freeze,因为/Environment/lib/python2.7/site-packages/中有一些我自己编写的软件包,我也需要复制它们。据我了解,pip freeze只创建一个包列表,然后下载并安装。

4 个答案:

答案 0 :(得分:14)

在源计算机上执行以下步骤

  1. workon [environment_name]
  2. pip freeze> requirements.txt
  3. 将requirements.txt复制到其他PC
  4. 在其他电脑上

    1. 使用mkvirtualenv [environment_name]
    2. 创建虚拟环境
    3. workon [environment_name]
    4. pip install -r requirements.txt
    5. 你应该完成!

      similar question How to Copy/Clone a Virtual Environment from Server to Local Machine

答案 1 :(得分:1)

我认为发生的事情是您只需将源文件中的符号链接作为二进制文件(不再链接)复制到目标计算机。您应该使用rsync -l复制它以复制以保留这些链接。

答案 2 :(得分:1)

我分享我的经验。

Suppose another PC does not install Python
Python version: 3.7.3 
Platform: Platform: Windows 10, 7 (64bit)

以下内容对我有用。

步骤:

  1. 下载Windows embeddable zip file
  2. 下载get-pip.py(因为embeddable zip file不提供点子)
  3. [可选]安装tkinter,请参阅本文:Python embeddable zip: install Tkinter
  4. 选择一种包装方法(我使用NSIS:https://nsis.sourceforge.io/Download

文件夹关节:

- main.nsi
- InstallData
    - contains: Step1 & Step2
- YourSitePackages  # I mean that packages you do not intend to publish to PyPI.
    - LICENSE
    - MANIFEST.in
    - README.rst
    - ...
    - requirements.txt
    - setup.py

main.nsi的缩写内容如下:

!define InstallDirPath "$PROGRAMFILES\ENV_PYTHON37_X64"
!define EnvScriptsPath "${InstallDirPath}\Scripts"
...

CreateDirectory "${InstallDirPath}"  # Make sure the directory exists before the writing of Uninstaller. Otherwise, it may not write correctly!
SetOutPath "${InstallDirPath}"
SetOverwrite on
File /nonfatal /r "InstallData\*.*"

SetOutPath "${InstallDirPath}\temp"
SetOverwrite on
File /nonfatal /r "YourSitePackages\*.*"
nsExec::ExecToStack '"${InstallDirPath}\python.exe" "${InstallDirPath}\get-pip.py"'  # install pip
nsExec::ExecToStack '"${InstallDirPath}\Scripts\pip.exe" install "${InstallDirPath}\temp\."'  # install you library. same as: `pip install .`
RMDir /r "${InstallDirPath}\temp"  # remove source folder.
...

/*
Push ${EnvScriptsPath}  # Be Careful about the length of the HKLM.Path. it is recommended to write it to the HKCU.Path, it is difficult for the user path to exceed the length limit
Call AddToPath  # https://nsis.sourceforge.io/Path_Manipulation
*/

希望有人将从中受益。

答案 3 :(得分:0)

通常,我使用virtualenv创建一个新环境,然后转到要从中复制的环境,复制所有文件夹并将其粘贴到我刚刚创建的环境文件夹中,但最重要的是在询问是否要替换目标文件,选择跳过这些文件。这样,您可以保留设置。 至少对我来说,这非常有效。 我希望它也对您有用。