为什么在Mac上使用Python虚拟环境时PyCharm会删除/usr/local/bin

7 投票
1 回答
998 浏览
提问于 2025-05-11 02:46

在 Mac OS X El Capitan 10.11.1 上运行这个程序,使用的是 PyCharm 5(在 PyCharm 4.5 中运行得很好)。

import os
print("PATH:", os.environ.get("PATH"))

如果我把 PyCharm 的项目解释器设置为系统自带的 Python:/Library/Frameworks/Python.framework/Versions/3.4/bin/python3,我得到的输出是:

PATH: /Users/agautam/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

如果我把同样的程序的项目解释器设置为一个虚拟环境 /Users/agautam/work/my-awesome-py-project/venv/bin/python3,我得到的输出是:

PATH: /usr/bin:/bin:/usr/sbin:/sbin:/Users/agautam/work/my-awesome-py-project/venv/bin

问题:就是当我使用虚拟环境时,/usr/local/bin 这个路径消失了。

这是虚拟环境的创建方式:

import sys, platform, subprocess
from os.path import dirname, join

root_path = join(dirname(__file__), '../..')
venv_path = join(root_path, 'venv')


def build_virtual_environment():
    print("Building virtual env from Python version", sys.version)

    # Create a fresh virtual env
    import venv
    builder = venv.EnvBuilder(with_pip=True)
    builder.create(venv_path)

    # Install dependencies in new virtual env
    run_in_venv('python', ['-m', 'pip', 'install', '--upgrade', 'pip'])  # Upgrade pip itself
    run_in_venv('pip', ['install', '-r', join(root_path, 'requirements.txt')])


def run_in_venv(cmd, args):
    if platform.system() == 'Windows':
        cmd += '.exe'
        virtual_env_bin_path = r'venv/Scripts'
    else:
        virtual_env_bin_path = r'venv/bin'

    subprocess.check_call([join(root_path, virtual_env_bin_path, cmd)] + args)


if __name__ == '__main__':
    build_virtual_environment()

补充信息:从命令行运行 Python 解释器得到的结果完全一样(所以看起来是 PyCharm 的问题):

$ /Library/Frameworks/Python.framework/Versions/3.4/bin/python3
Python 3.4.0 (v3.4.0:04f714765c13, Mar 15 2014, 23:02:41) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ.get("PATH")
'/Users/agautam/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'
>>> 

$ ./venv/bin/python3
Python 3.4.0 (v3.4.0:04f714765c13, Mar 15 2014, 23:02:41) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ.get("PATH")
'/Users/agautam/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'
>>> 

任何帮助、信息或建议都将非常感谢。

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

0

这个问题被报告给了JetBrains,编号是PY-17816。现在在2017.1.2版本(版本号171.4249.47)中已经修复,具体可以查看发布说明

撰写回答