在C/C++中是否有办法找到当前执行程序的位置(完整路径)?
(问题argv[0]在于它没有给出完整的路径.)
还有许多类似于此问题的其他StackOverflow问题,但在每种情况下,平台都不同或错误消息不同或解决方案没有效果或过时.我正在尝试设置Python 2.7.6 virtualenv并在其中安装模块,但easy_install给出了错误,指示setuptools不可用.但是AFAIK easy_install是setuptools的一部分,所以这没有任何意义.
问题只发生在virtualenv中.这就是我所做的:
yum -y update最新的东西,重新启动./configure; make; sudo make installpython -V给了我2.7.6并sudo python -V给了我2.7.6wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py--no-check-certificate标志添加到wget以解决我们网络中的代理服务器问题sudo python ez_setup.pysudo easy_install pipsudo pip install virtualenvvirtualenv virtpy. virtpy/bin/activateeasy_install elementtree除最后一个步骤外,所有这些步骤都成功,但失败的原因是:
Traceback (most recent call last):
File "/home/gperrow/virtpy/bin/easy_install", line 7, in <module>
from setuptools.command.easy_install import main
File "/home/gperrow/virtpy/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 44, in <module>
from setuptools.package_index import PackageIndex
File "/home/gperrow/virtpy/lib/python2.7/site-packages/setuptools/package_index.py", line 203, in <module> …Run Code Online (Sandbox Code Playgroud) 如果我做了一个模块,我想作为在Python 3运行在Python 2相同,有一吨的选项包括six,futures,和2to3。如果更改的数量很少,那么这些工具中的每一个都有足够的怪癖,我倾向于只为我的模块实际使用的少数不兼容功能编写兼容接口。
实现这一点的合理标准方法是使用简单的版本检查。
import module_bar
if sys.version_info >= (3,):
uniformly_named_foo = module_bar.py3_thing
else:
uniformly_named_foo = module_bar.py2_thing
Run Code Online (Sandbox Code Playgroud)
是否有任何奇怪的情况sys.version_info不会正确报告?过去,我已经被格式错误的路径、配置、安装、修改以及诸如此类的东西所困扰,以至于我觉得这不是我应该信任的事情。
当我们深入研究它时,我真正关心的是是否实现了特定功能。在 Web 开发中,嗅探用户代理通常被认为是一种不好的做法。相反,应该尽最大努力确定某个特定功能是否正在使用中。根据功能的不同,有很多方法可以实现这一点。
if hasattr(module_bar, 'py3_thing'):
uniformly_named_foo = module_bar.py3_thing
else:
uniformly_named_foo = module_bar.py2_thing
Run Code Online (Sandbox Code Playgroud)
在我的机器上,第二条路线慢两倍(对于一次性操作来说,额外的几百纳秒并不重要),但它似乎没有任何其他主要缺点。还是有优势?是否存在第二种方法会成功而第一种方法会失败的 Python 安装?
python ×3
pip ×2
python-2.7 ×2
c ×1
c++ ×1
easy-install ×1
linux ×1
path ×1
python-3.x ×1
security ×1
sudo ×1
unix ×1
virtualenv ×1