This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2014年02月14日 01:53 by FeralBytes, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (7) | |||
|---|---|---|---|
| msg211193 - (view) | Author: FeralBytes (FeralBytes) | Date: 2014年02月14日 01:53 | |
Well trying to test out venv on Python 3.3.2 on Linux Mint 16 x64 I was not able to get pip to execute correctly after it had been installed. The error from bash is: (venv) wolfrage@wolfrage-KGP-M-E-D16 /media/ShareDrives/HomePlus/Jordan/Projects/The Strategist $ pip install pysdl2 bash: /home/wolfrage/Projects/The Strategist/venv/bin/pip: /home/wolfrage/Projects/The: bad interpreter: No such file or directory Same exact setup procedures in a path with out any spaces works as expected: (venv) wolfrage@wolfrage-KGP-M-E-D16 /media/ShareDrives/HomePlus/Jordan/Projects $ pip install pysdl2 --allow-external pysdl2 --allow-unverified pysdl2 Downloading/unpacking pysdl2 pysdl2 is potentially insecure and unverifiable. Downloading PySDL2-0.8.0.zip (1.1MB): 1.1MB downloaded Running setup.py (path:/media/ShareDrives/HomePlus/Jordan/Projects/venv/build/pysdl2/setup.py) egg_info for package pysdl2 Installing collected packages: pysdl2 Running setup.py install for pysdl2 Successfully installed pysdl2 Cleaning up... (venv) wolfrage@wolfrage-KGP-M-E-D16 /media/ShareDrives/HomePlus/Jordan/Projects $ python3 Python 3.3.2+ (default, Oct 9 2013, 14:50:09) [GCC 4.8.1] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sdl2 >>> exit() I hope that this can be fixed prior to 3.4 being released. This not only affected pip but easy_install too. |
|||
| msg211232 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | Date: 2014年02月14日 18:31 | |
Due to the way the shell or kernel parses the shebang, you can’t have spaces in the path to the interpreter: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00053.html The solution is to separate your virtualenv from the directory containing your code. (virtualenvwrapper works in that way for example.) virtualenv’s job is to have a copied Python with an isolated site-packages; it does not matter whether the Python is in your project directory (./bin/python) or anywhere else (~/venvs/strategist/bin/python). |
|||
| msg211255 - (view) | Author: FeralBytes (FeralBytes) | Date: 2014年02月15日 01:39 | |
Wow that is a very compelling argument that I am hesitant to raise a counter point against. But I feel I would at least like to understand better. So why does this issue not affect the interpreter in the venv itself, only pip and easy_install, or other such tools with-in the venv? It seems to me that the activate script gets around this somehow for the interpreter, as it ran fine in the directory with a space in the name. Is it possible to apply the same fix action to at least pip since it will be included in venv once 3.4 is final, for a better user experience, or at least less user complaints? In the meantime, I will fix my directory to use underscores instead of spaces. Thank you for your time. |
|||
| msg211515 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2014年02月18日 15:51 | |
The interpreter is a compiled C binary, not a shell script. Thus the limitations of the !# "hack" do no apply to the interpreter itself. |
|||
| msg211516 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2014年02月18日 15:53 | |
s/shell script/script/ (A python script is not technically a "shell" script, but it uses the same !# mechanism to launch the binary (the interpreter) that reads the contents of the file and executes it.) |
|||
| msg211520 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | Date: 2014年02月18日 16:30 | |
> Wow that is a very compelling argument that I am hesitant to raise a counter point against. I was not making an argument to describe a choice made by Python developers, but describing how unix shells have been working for the last decades. The behavior you observe is not related to Python at all, so it’s not in our hands to change for 3.4 or any future version. > So why does this issue not affect the interpreter in the venv itself, only pip and easy_install, or > other such tools with-in the venv? It seems to me that the activate script gets around this somehow for > the interpreter, as it ran fine in the directory with a space in the name. If I understand correctly, you mean that after activating a venv, you can type "python" and get the venv’s Python to run, but you if you type "pip" you get the error message about the space in the path. The difference here, to expand RDM’s reply, is that more things happen when you run pip. When you run "python", the system splits the PATH environment variable on ":", walks each dir found to see if their is an executable file named "python" there, and when found, runs it (it’s compiled code that can run directly). This works because the paths in PATH are separated with a colon, so one path can contain spaces. When you run "pip", the steps above are done, then the shebang system is invoked: the pip file is not a binary executable but a script (text) file, so the shell or kernel will use another program to run that script, the shell by default or another program specified shebang. A shebang is defined as "#!" + optional space + path without spaces + arguments (not supported by all systems). That’s the issue here. |
|||
| msg211521 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | Date: 2014年02月18日 16:31 | |
another program specified shebang → another program specified using a shebang |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:58 | admin | set | github: 64821 |
| 2014年02月18日 16:31:47 | eric.araujo | set | messages: + msg211521 |
| 2014年02月18日 16:30:23 | eric.araujo | set | messages: + msg211520 |
| 2014年02月18日 15:53:28 | r.david.murray | set | messages: + msg211516 |
| 2014年02月18日 15:51:42 | r.david.murray | set | status: open -> closed nosy: + r.david.murray messages: + msg211515 resolution: not a bug |
| 2014年02月15日 01:39:05 | FeralBytes | set | status: pending -> open resolution: not a bug -> (no value) messages: + msg211255 |
| 2014年02月14日 18:31:24 | eric.araujo | set | status: open -> pending nosy: + eric.araujo messages: + msg211232 resolution: not a bug stage: resolved |
| 2014年02月14日 01:53:15 | FeralBytes | create | |