我目前是网络编程的新手。我最近一直在研究这个Django项目,我一直在阅读虚拟环境。在我的项目开始时,我无法建立虚拟环境,因此我在没有它的情况下继续进行项目。我的问题是
这个虚拟环境是否真的有必要?
如果我想在未来制作更多Django项目,我是否需要这个虚拟环境来区分项目,因为我现在正在命令提示符中从我的主C:目录运行所有命令?
这个虚拟环境是区分多个项目还是将每个项目与它编码的Django / Python版本或两者分开?我想知道因为我目前在我的主C:盘目录中输入python manage.py runserver
(没有虚拟环境)等命令。那么这是否意味着我不能在没有虚拟环境的情况下一次完成多个项目?没有虚拟环境,我还可以在多个项目上工作吗? (我特别对此感到困惑)
我是否应该尝试为我的下一个项目设置虚拟环境,或者我仍然可以为当前项目设置虚拟环境(我已经在项目的中途,我已经制作了模型,视图,模板等。 )?
非常感谢任何澄清我的困惑的答案!
答案 0 :(得分:11)
如果没有虚拟环境,您的所有项目都将使用相同的已安装软件包。
当您想要将项目移动到服务器时,您不知道该项目需要哪些软件包,因此您唯一的选择是在那里安装所有这些软件包。它将很快成为一个很长的列表,并且该特定项目不需要许多软件包。
使用虚拟环境时,每个项目都有一组已安装的软件包,并且它们不会混合使用。好多了。
您现在可以开始使用虚拟环境了。在项目目录中,执行:
pip install virtualenv
现在你有了virtualenv命令(适用于所有项目)。
virtualenv env
现在你的项目目录中有一个目录“env”,它将包含这个项目的virtualenv。
env\Scripts\activate
现在您正在使用此virtualenv(您的提示已更改以反映该内容)。
pip install django
仅为此项目安装Django。
pip freeze
显示您安装了哪些软件包,现在仅用于此项目。
pip freeze > requirements.txt
创建一个requirements.txt,您可以使用它来记住需要安装的软件包以及
的输入pip install -r requirements.txt
安装它们。这或多或少都是你需要的。
答案 1 :(得分:6)
嗯,这是初学者中最常见的问题之一。我,我自己已经面临这个问题,并且确实构建了多个项目,而不必担心虚拟环境。
但是,最近,我意识到使用虚拟环境的重要性。使用虚拟环境的一些好处是:
pip install -r requirements.txt
可以在任何地方安装依赖项。答案 2 :(得分:3)
在java中,所有使用的库都可以打包到war或jar文件中。优点是您无需担心操作系统的环境。
Python是一种纯动态语言。没有虚拟环境,所有python库都需要安装到系统路径中并在所有python项目之间共享。
想象一下,您正在开发一个django 1.10项目。你找到了一个演示项目。您想在您的计算机上运行它。但它只与django 1.8兼容。你不能在同一台机器上安装同一个lib的两个版本,所以你会卡住。
虚拟环境解决了这样的问题。
但当然虚拟环境并不完美。有像mysql-python这样的python库依赖于libmysqld。如果在项目中使用了这些库,则它不能完全独立于OS中的设置。我认为最好的做法是将虚拟机与docker结合使用。像pycharm这样的IDE支持通过docker远程运行
答案 3 :(得分:0)
虚拟环境在您的计算机上创建python和软件包的虚拟安装。 假设您有自己的Web应用程序。随着时间的流逝,软件包会更新,并且有些更改有时会破坏您的Web应用程序或Web项目可能依赖的向后兼容性。 因此,如果您想测试软件包更新的新功能但又不想破坏Web应用程序,该怎么办。 毕竟,每次更新软件包后,您都不能随便关闭网站。这就是虚拟环境的所在。 您可以创建一个包含较新版本软件包的虚拟环境,也可以创建一个较旧版本软件包的虚拟环境。 但是幸运的是Anaconda对我们来说真的很容易。(Anaconda中已经包含一个虚拟处理程序。)
答案 4 :(得分:0)
您需要Python虚拟环境来管理项目的Python软件包依赖性,因此,例如在另一台计算机上安装时,它将始终具有正确的版本软件包。可以使用'''
'''
from __future__ import print_function
import sys
from lxml import etree as ET
import fileinput
from pathlib import Path, PurePath
def PrintFilePathAndNameCase(filepath) :
mypath = Path(filepath)
if mypath.exists():
try:
patharray = filepath.split( '\\' )
for index, part in enumerate(mypath.parts):
mypath = mypath.joinpath(part)
realname = mypath.parts[index]
for child in mypath.parent.iterdir():
if child.name.lower() == realname:
if child.name != realname:
patharray[index] = child.name
pathonly = '\\'.join(patharray)
return pathonly
except Exception as e:
print(e)
return False
else:
return False
def ExtractFilenameFromXML(coverageresultsfilename):
filesanalysedlist = []
root = ET.parse(coverageresultsfilename)
for fileanalysed in root.findall("disk/files/file"):
fileanalysednameandpath = fileanalysed.attrib['name']
filesanalysedlist.append( fileanalysednameandpath)
#remove duplicates in the list
filesanalysedlistunique = []
filesanalysedlistunique = list(set(filesanalysedlist))
return filesanalysedlistunique
def ReplaceLowercaseFilenamewithMixedCaseFilename(coverageresultsfile):
'''
Iterates through the list of filenames in the XML files and for each one
scans the filesystem for a mixed case equivalent. If the equivalent exists then
the existing filename is replaced by it.
'''
filesanalysedlist = []
filesanalysedlist = ExtractFilenameFromXML(coverageresultsfile)
for item in filesanalysedlist:
caseitem = PrintFilePathAndNameCase(item)
if caseitem is not False:
with fileinput.input(files=(coverageresultsfile),inplace=True,backup='backup' ) as f:
for line in f:
line = line.replace( item[2:], caseitem[2:] )
print(line, end='',flush=True)
return True
if __name__=='__main__':
import sys
if len(sys.argv)<2:
print( "Please specify a file name")
else:
ReplaceLowercaseFilenamewithMixedCaseFilename(sys.argv[1])
(对于软件包)和pip
(对于虚拟环境)或virtualenv
(两者都进行)来管理Python虚拟环境。
有关更多信息,请参见本文:“ Why you need Python environments and how to manage them with Conda”。
答案 5 :(得分:0)
首先,我们创建虚拟包装器
,然后在制作包装环境之后 创建一个虚拟环境-
(命令仅运行64位python) 如果要启动虚拟环境,请设置您的工作场所(目录) 使用命令提示符并编写命令