python用Anaconda管理多个解释器,在各自的解释器下独立使用自己的包

python用Anaconda管理多个解释器,在各自的解释器下独立使用自己的包
  先说哈问题背景,我在一个项目里写了两个py文件,然后两个文件都需要调用kmeans函数,不同之处在于其中一个py文件调用的kmeans函数的目标函数我需要修改,然而sklearn.cluster里面的文件都不能随便修改文件名,真的是稍有不慎一地bug,解决起来贼拉麻烦不说关键能否这么干也是个未知数。
  先说下试错过程:我原本直接在sklearn.cluster.k_means_.py中修改多个函数,具体改了参数以及实现细节,因为函数调用就顺带着修改了sklearn.metrics.pairwise.py中的若干函数。原本这个修改贼拉方便的满足了我的需求,因为我需要利用的kmeans聚类不仅需要改变目标函数且需要多进程。但是在我因为另一个聚类需求需要调用最原始的kmeans聚类时,问题就出现了。我两种聚类都需要啊。于是1、我先尝试直接将修改了的kmeans()及其它函数都重命名,并入原始的py文件中,但是要顾及调用关系,就得顺带着修改pairwise里面的东西,好家伙,改的稀巴烂bug一堆,该法弃。2、我尝试将sklearn包在一个文件夹下复制,且重命名sklearn1,运行时import的时候就注意区分两个包名,很不出意外的出了AttributeError: type object ‘sklearn.neighbors.ball_tree.BallTree’ has no attribute 'valid_metrics’的错误,不出意外是我知道会有错,但是这个错怎么解决一顿搜,该法弃。3、开始尝试用Anaconda新建了一个解释器环境,且在该环境下安装新的sklearn,同步到pycharm中每个文件的解释器环境我也选择不一样。但是不知道哪里没配置正确,(这一点也是我对pycharm的不熟造成的,等我意识到这个问题也迎刃而解了)两个要调用kmeans的文件总是用的默认解释器中的kmeans,这样我依然改不了目标函数啊。
  插播一段题外话,午饭时间冲我男朋友发了几句牢骚,大意就是这么个破问题我搞了几天都没解决,心里恨恨的超级无敌巨不爽。男朋友开始了他超级无敌巨理性的分析,往事骤浮心头,好像之前有过数次这种一个小bug罗里吧嗦搞几天都一筹莫展的情况,他也确无办法的只能建议谷歌啊,啥啥的。我就冲着空气骂了句,用这种骂人的方式表达我的态度,不是针对他,却把这小子气的不行啊。后来和解的时候还嘲笑我你不会是用中文搜的吧?好,我不要你帮忙了,seiyou啦啦。
  所以,以后遇到这种说大不大,但是的确接触的很少的麻烦问题,还是靠自己吧。
  说回正题,再复述一遍,如果你的诉求类似于,你有两个py文件,需要调用同一个包中的函数,但是咧,其中一个py文件需要对这个包中的函数加以修改,另一个维持原判,那么请接着看。
  首先,你需要了解为什么需要Anaconda,你姑且知道这个一个解释器的管理工具,在它的下面可以创建不同的python环境,每个python环境中只安装它自己需要的包。这样在我的问题背景下,我就可以安装两个一个的python环境,但是给它们命名不同。并且都安装sklearn,其中一个环境中的kmeans函数自行修改。
  关于Anaconda如何安装以及解释器的含义及安装,参见这篇博文,简单易懂Anaconda完全入门指南
  其次,就是回到我们的pycharm了。如下图:在Settings->Project:(你的项目名) ->Project Interpreter中右边的那个小齿轮,然后AddLocal就可以添加你在本地Anaconda下创建的解释器,同时在运行不同的文件时,你就跑到这里来重新选择解释器并Apply,在文件运行的时候,就会调用对应解释器下面的Kmeans函数。
python用Anaconda管理多个解释器,在各自的解释器下独立使用自己的包
  (这里与前面“但是不知道哪里没配置正确”相呼应,我的理解是你选择的解释器是针对一个项目的,所以你在每个项目上选好了解释器环境并Apply之后,下次运行就会自动在相应的环境下运行。但是我的问题背景是我将两个文件创建在一个项目中,所以我必须每次运行的时候选择不同的解释器,将不同的kmeans函数进行对应。)
  本来如下图,在pycharm右上角是可以给不同的py文件选择对应的解释器的,我认为理论上在这里选择好了就可以,但是无奈在我操作的时候不行,所以只能稍微笨操作一些,在具体的执行过程中还是按上面在setting中选择不同的解释环境吧。
python用Anaconda管理多个解释器,在各自的解释器下独立使用自己的包

后记:问题还是贼拉多的,希望明白人指点指点*吧。