我将Python 2.7安装从C:\ Python移动到D:\ Python只需移动文件夹(我知道还有其他方法可以做到这一点)。运行 D:\ Python \ python.exe 时,我可以导入系统库并运行而不会出现任何问题。但是,我无法运行 D:\ Python \ Scripts \ ipython.exe。我收到以下错误:
Fatal error in launcher: Unable to create process using '"C:\Python\python.exe"
"D:\Python\Scripts\ipython.exe" '
似乎ipython知道它的原始安装目录C:\ Python,并尝试访问它。我可以使用任何启动选项或环境变量来强制ipython使用新的安装目录吗?
感谢。
修改
以下过程完全正常。我首先通过D:\ Python \ python.exe启动Python,然后运行:
import IPython
IPython.start_ipython()
为什么这与运行D:\ Python \ Scripts \ ipython.exe?
不同答案 0 :(得分:0)
关于pip,我遇到了这个问题,不得不将我的python安装升级到2.7.6并重新安装pip。
答案 1 :(得分:0)
我也遇到过这个问题。问题是pip在安装时硬编码了Scripts文件夹(在本例中为IPython)中可执行文件的Python解释器的路径。
我认为这不是控制哪个Python解释器pip应该用于可执行文件的方法。目前,Github上存在一些未解决的问题,表明这仍然是一个未解决的问题,例如: https://github.com/pypa/pip/issues/2845
但是,我发现此帖http://www.clemens-sielaff.com/create-a-portable-python-with-pip-on-windows/中描述的解决方法对我有用。基本上,只需在文本编辑器中打开exe文件并编辑Python解释器的路径(您将在文件的末尾找到它#!<your path>
)。我正在使用#!python
,因为我知道我选择的Python解释器将首先出现在路径中。
答案 2 :(得分:0)
我有一个非常相似的问题,因为我使用的是通过安装程序提供的便携式 python 应用程序。正如其他答案所示,.exe 中有一个硬编码路径,指向原始安装程序配置中的 python。
问题在于,使用此硬编码路径的不仅是 pip.exe
、ipython.exe
或 jupyter.exe
,而是 {{1} } 文件夹。就我而言,解决方案是不重新安装每个模块,因为这破坏了可移植包的想法。此外,这将需要额外的互联网资源,而用户可能无法使用这些资源。
解决方案是替换编译脚本本身中python.exe的路径。这是对我有用的解决方案,来自之前的 example:
这是链接断开的代码:
.\python\Scripts
在python文件夹内调用:
"""
Patch the distribution to make it portable
"""
import os
import sys
def win_patch_paths(folder, python_path, path_to_python="", fLOG=print):
"""
path are absolute when they are installed,
see `Create a portable Python with Pip on Windows <http://www.clemens-
sielaff.com/create-a-portable-python-with-pip-on-windows/>`_
:param folder: folder when to find the executable
:param python_path: python path (string to replace)
:param path_to_python: new python path (replace by)
:param fLOG: logging function
:return: list of tuple ('exe or py', 'modified file')
The first three parameter can be environment variables.
They will be replaced by their values.
"""
if isinstance(python_path, list):
operations = []
for pyt in python_path:
op = win_patch_paths(folder, pyt, path_to_python, fLOG)
operations.extend(op)
return operations
else:
if folder in os.environ:
folder = os.environ[folder]
if python_path in os.environ:
python_path = os.environ[python_path]
if python_path == "EMPTY_STRING":
python_path = ""
if path_to_python in os.environ:
path_to_python = os.environ[path_to_python]
files = os.listdir(folder)
if len(python_path) > 0 and not python_path.endswith("\\"):
python_path += "\\"
if len(path_to_python) > 0 and not path_to_python.endswith("\\"):
path_to_python += "\\"
operations = []
for prog in ["python.exe", "pythonw.exe"]:
shebang = "#!" + python_path + prog
bshebang = bytes(shebang, encoding="ascii")
into = "#!" + os.path.normpath(path_to_python + prog)
binto = bytes(into, encoding="ascii")
fLOG("replace {0} by {1}".format(shebang, into))
for file in files:
full = os.path.join(folder, file)
if os.path.isfile(full):
ext = os.path.splitext(full)[-1]
if ext in {".py", ""}:
with open(full, "r") as f:
content = f.read()
if shebang in content:
content = content.replace(shebang, into)
fLOG("update ", full)
operations.append(("update", full))
with open(full, "w") as f:
f.write(content)
elif ext == ".exe":
with open(full, "rb") as f:
content = f.read()
if bshebang in content:
content = content.replace(bshebang, binto)
fLOG("update ", full)
operations.append(("update", full))
with open(full, "wb") as f:
f.write(content)
else:
pass
return operations
if __name__ == '__main__':
folder = sys.argv[1]
old = sys.argv[2]
new = sys.argv[3]
print("folder:",folder)
print("old:",old)
print("new:",new)
op = win_patch_paths(folder=folder,python_path=old,path_to_python=new)