tor*_*rho 42 python command-line environment-variables sage pycharm
我想尝试PyCharm进行鼠尾草数学开发.通常我运行eclipse来进行sage开发,但现在我想用PyCharm尝试它.
要使用sage环境变量启动eclipse,在命令行中我通常会执行以下操作:
sage -sh
cd /path/to/eclipse
./eclipse
Run Code Online (Sandbox Code Playgroud)
第一行加载sage环境变量,其余部分启动eclipse.我怎么能为pyCharm做同样的事情?(注意我使用Mac和Ubuntu进行sage开发;上面的命令对两个操作系统都是不可知的)
joe*_*est 151
Create Command-line Launcher/usr/local/bin/charm$ charm YOUR_FOLDER_OR_FILE愿你这需要.
for*_*ord 15
你是对的,JetBrains帮助页面不是很清楚.在OS X上,您需要在以下位置使用启动器:
/Applications/PyCharm.app/Contents/MacOS/pycharm
Run Code Online (Sandbox Code Playgroud)
或者,对于社区版:
/Applications/PyCharm\ CE.app/Contents/MacOS/pycharm
Run Code Online (Sandbox Code Playgroud)
不幸的是,为这个二进制文件添加一个符号链接对我来说不起作用(启动程序会崩溃).但是设置别名是有效的.将此添加到您的.bash_profile(或您使用的任何shell)中:
alias pycharm="/Applications/PyCharm CE.app/Contents/MacOS/pycharm"
Run Code Online (Sandbox Code Playgroud)
然后,您可以简单地运行命令pycharm.
有了这个你可以做一些事情,比如打开一个项目:
pycharm ~/repos/my-project
Run Code Online (Sandbox Code Playgroud)
或者在项目中打开文件的特定行:
pycharm ~/repos/my-project --line 42 ~/repos/my-project/script.py
Run Code Online (Sandbox Code Playgroud)
或者查看两个文件的差异(它们不需要是项目的一部分):
pycharm ~/some_file.txt ~/Downloads/some_other_file.txt
Run Code Online (Sandbox Code Playgroud)
请注意,我需要将绝对路径传递给这些文件,否则PyCharm无法找到它们.
小智 15
在IDE中,您可以单击:
工具/创建命令行启动器......
luc*_*ald 13
无需任何路径的简单解决方案:
open -b com.jetbrains.pycharm <file>
Run Code Online (Sandbox Code Playgroud)
您可以将其设置为别名,以便日常使用更方便(放在您的~/.bash_rc等中):
alias pycharm='open -b com.jetbrains.pycharm'
Run Code Online (Sandbox Code Playgroud)
用法:
# open current dir:
pycharm .
# open a file:
pycharm file.py
Run Code Online (Sandbox Code Playgroud)
我通常使用OS X中的内置应用程序启动器(打开)进行别名:
alias pc='open -a /Applications/PyCharm\ CE.app'
Run Code Online (Sandbox Code Playgroud)
然后我可以输入:
pc myfile1.txt myfiles*.py
Run Code Online (Sandbox Code Playgroud)
虽然你不能(容易)通过参数传递给PyCharm,如果你想快速的方法来打开文件(无需使用全路径名的文件),这样做的伎俩.
使用 Tools -> Create Command-line Launcher 这将安装一个 python 脚本,您可以在其中使用 char 启动当前工作文件夹。
很重要!
每当您升级 pyCharm 时,您都必须重新创建该命令行工具,因为它只是一个指向 pyCharm 配置的 python 脚本,该配置可能已过时并在您尝试运行时导致它失败 charm .
这是现在可以从JetBrains的工具箱发射器自动创建命令行。这是您的操作方式:
Generate shell scripts;Shell script location文本框中填入您希望启动器驻留的位置。您必须手动执行此操作,此时它不会自动填充!在Mac上,位置可能是/usr/local/bin。对于新手,您可以使用PATH变量内的任何路径,也可以在bash配置文件中为PATH变量添加新路径。用echo $PATH看哪个路径存在。
注意!它对我来说不是立即可用,在脚本生成之前,我不得不花了一些时间。您可以转到IDEA的变速箱(例如PyCharm),然后查看/更改启动器名称。因此,对于PyCharm,默认名称为,pycharm但您可以将其更改为自己喜欢的名称。
如果您不使用工具箱,则仍然可以使用我的原始答案。
~~由于某种原因,该Create Command Line Launcher功能于2019.1.1不再可用。~~ 因为它现在是JetBrains Toolbox的一部分
您可以通过以下方式自己创建脚本:
如果在使用前已经使用过charm命令type -a charm来查找脚本。在文件路径中更改pycharm版本。请注意,第一个变量中的编号RUN_PATH是不同的。您必须自己在目录中查找。
RUN_PATH = u'/Users/boatfolder/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/191.6183.50/PyCharm.app'
CONFIG_PATH = u'/Users/boatfolder/Library/Preferences/PyCharm2019.1'
SYSTEM_PATH = u'/Users/boatfolder/Library/Caches/PyCharm2019.1'
Run Code Online (Sandbox Code Playgroud)
如果以前没有使用过charm命令,则必须创建它。
在以下位置创建超级魅力文件: /usr/local/bin/charm
然后添加以下代码(如上所述,将版本号更改为您的版本):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import struct
import sys
import os
import time
# see com.intellij.idea.SocketLock for the server side of this interface
RUN_PATH = u'/Users/boatfolder/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/191.6183.50/PyCharm.app'
CONFIG_PATH = u'/Users/boatfolder/Library/Preferences/PyCharm2019.1'
SYSTEM_PATH = u'/Users/boatfolder/Library/Caches/PyCharm2019.1'
def print_usage(cmd):
print(('Usage:\n' +
' {0} -h | -? | --help\n' +
' {0} [project_dir]\n' +
' {0} [-l|--line line] [project_dir|--temp-project] file[:line]\n' +
' {0} diff <left> <right>\n' +
' {0} merge <local> <remote> [base] <merged>').format(cmd))
def process_args(argv):
args = []
skip_next = False
for i, arg in enumerate(argv[1:]):
if arg == '-h' or arg == '-?' or arg == '--help':
print_usage(argv[0])
exit(0)
elif i == 0 and (arg == 'diff' or arg == 'merge' or arg == '--temp-project'):
args.append(arg)
elif arg == '-l' or arg == '--line':
args.append(arg)
skip_next = True
elif skip_next:
args.append(arg)
skip_next = False
else:
path = arg
if ':' in arg:
file_path, line_number = arg.rsplit(':', 1)
if line_number.isdigit():
args.append('-l')
args.append(line_number)
path = file_path
args.append(os.path.abspath(path))
return args
def try_activate_instance(args):
port_path = os.path.join(CONFIG_PATH, 'port')
token_path = os.path.join(SYSTEM_PATH, 'token')
if not (os.path.exists(port_path) and os.path.exists(token_path)):
return False
try:
with open(port_path) as pf:
port = int(pf.read())
with open(token_path) as tf:
token = tf.read()
except (ValueError):
return False
s = socket.socket()
s.settimeout(0.3)
try:
s.connect(('127.0.0.1', port))
except (socket.error, IOError):
return False
found = False
while True:
try:
path_len = struct.unpack('>h', s.recv(2))[0]
path = s.recv(path_len).decode('utf-8')
if os.path.abspath(path) == os.path.abspath(CONFIG_PATH):
found = True
break
except (socket.error, IOError):
return False
if found:
cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args)
if sys.version_info.major >= 3: cmd = cmd.encode('utf-8')
encoded = struct.pack('>h', len(cmd)) + cmd
s.send(encoded)
time.sleep(0.5) # don't close the socket immediately
return True
return False
def start_new_instance(args):
if sys.platform == 'darwin':
if len(args) > 0:
args.insert(0, '--args')
os.execvp('/usr/bin/open', ['-a', RUN_PATH] + args)
else:
bin_file = os.path.split(RUN_PATH)[1]
os.execv(RUN_PATH, [bin_file] + args)
ide_args = process_args(sys.argv)
if not try_activate_instance(ide_args):
start_new_instance(ide_args)
Run Code Online (Sandbox Code Playgroud)