以下是我的公司“foo.com”使用的一些各种 Python 包:
com.foo.bar.web
com.foo.bar.lib
com.foo.zig.web
com.foo.zig.lib
com.foo.zig.lib.lib1
com.foo.zig.lib.lib2
Run Code Online (Sandbox Code Playgroud)
这是将源存储在磁盘上的传统方法:
pysrc/
com/
foo/
bar/
web/
lib/
zig/
web/
lib/
lib1/
lib2/
PYTHONPATH=pysrc
Run Code Online (Sandbox Code Playgroud)
但出于组织目的(不同的团队、不同的版本控制等),我们希望将它们存储如下:
bar/
pysrc/
com/
foo/
bar/
web/
lib/
zig/
pysrc/
com/
foo/
zig/
web/
lib/
lib1/
lib2/
PYTHONPATH=bar/pysrc:zig/pysrc
Run Code Online (Sandbox Code Playgroud)
问题是:
第二种组织方法有什么问题吗?
例如,如果我们import com.foo,Python 会在哪里寻找__init__.py?
符号链接这些目录有意义吗?例如:
pysrc/
com/
foo/
bar/ -> symlink to /bar/pysrc/com/foo/
zig/ -> symlink to /zig/pysrc/com/foo/
Run Code Online (Sandbox Code Playgroud)
欢迎任何一般代码组织建议。
所以我在Ubuntu 14.04机器上将我的所有工具从python2迁移到python3.4.到目前为止,我已经完成了以下工作:
mkvirtualenv --python=/usr/bin/python3('workon'在下面被调用为'v')现在好奇,你可以清楚地看到它,从virtualenv激活的环境运行python3仍然继承我的$ PYTHONPATH,它仍然为我所有的python2路径设置.这在我的virtualenv中安装/运行程序时会造成严重破坏,因为python3路径显示在旧的python2路径之后,因此python2模块首先在我的程序中导入.在启动virtualenv之前将我的$ PYTHONPATH取消为''修复此问题并且我的程序按预期启动.但我的问题是:
? echo $PYTHONPATH
/usr/local/lib/python2.7/site-packages:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/home/brian/dev
brian@zeus:~/.virtualenvs
? python2
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys, pprint
>>> pprint.pprint(sys.path)
['',
'/usr/local/lib/python2.7/dist-packages/pudb-2013.3.4-py2.7.egg',
'/usr/local/lib/python2.7/dist-packages/Pygments-1.6-py2.7.egg',
'/usr/local/lib/python2.7/dist-packages/urwid-1.1.1-py2.7-linux-x86_64.egg',
'/usr/local/lib/python2.7/dist-packages/pythoscope-0.4.3-py2.7.egg',
'/usr/local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/home/brian/dev',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol',
'/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
>>>
brian@zeus:~/.virtualenvs
? v py3venv
(py3venv)
brian@zeus:~/.virtualenvs … 我一直在尝试修复我的cpu上的python路径,我最初只是想改变我的.bash_profile,但这不起作用,所以我使用
import sys
sys.pat.append(path/To/Module)
Run Code Online (Sandbox Code Playgroud)
现在当我运行我的脚本时,我收到此错误消息
我该如何解决此问题或撤消该问题sys.path.append(path/To/Module)?
另外,是否可以导出 python 路径中的多个目录,如果可以,我该怎么做?
如果我输入which python我得到:/home/USER/anaconda3/bin/python
如果我输入echo $PYTHONPATH我得到:/home/USER/terrain_planning/devel/lib/python2.7/dist-packages:/opt/ros/melodic/lib/python2.7/dist-packages
应该不一样吧?设置它不是更好:usr/lib/python/
我该怎么做?将它添加到 PYTHONPATH 或将 PYTHONPATH 设置为那个?但是怎么设置which python呢?
我正在尝试将 src 文件夹添加到我的PYTHONPATHiE 中,做与Mark directory as sources root在 PyCharm 中相同的事情。
我查看了Visual Studio Code的解决方案- 如何向 python 路径添加多个路径?但是那里显示的解决方案对我不起作用。
我已经设置了我的最小示例,如下面的屏幕截图所示:
我的理解是拥有一个 .env 文件PYTHONPATH="./src;${PYTHONPATH}"会将 src 文件添加到路径中。
然而,当运行代码运行器或运行python change_pyhton_path.pysrc 不是 PYTHONPATH 的一部分并且从 src 直接导入失败时。
我确实有设置"python.envFile": "${workspaceFolder}/.env"。
另一方面,在 pyCharm 中,点击Mark directory as sourcesrc后一切正常。

感谢您的帮助!
我刚刚开始接触编程,需要一些帮助。当我在 Mac 上打开 VScode 并且我的 python 解释器版本不会显示在状态栏中时,我的问题就开始了。我问过类似的问题: Python Interpreter Version not shown in status bar of VS code on Mac
我更深入地研究了它(https://www.youtube.com/watch?v=veJvQ88ULOM&t=193s),发现我可能需要给它一个路径,所以我正在寻找如何通过转到 code/preference/ 来设置它settings/ 然后单击打开设置 JSON(右上角图标)以将 python.pythonPath: "/opt/homebrew/opt/python@3.9/bin/python3.9" 放入大括号中以使其工作,但我的 VS 代码获胜甚至不认识 python.pythonPath。
任何帮助深表感谢!
我安装了Python 3.8.10 64位(win10)。我将它与 VSC 一起使用。另外对于 c/c++ 我已经安装了 mingw64。Mingw64 安装了一个 python 版本,不知道为什么和为什么,但它已经出现了问题。因为 mingw64 安装是系统范围的安装,并且 Path 是系统变量,所以每次我尝试从控制台运行某些内容时,都会使用 mingw64 python 安装。所以我的 python 安装是本地的、用户范围的安装。因此,每次都会首选系统范围安装,除非我每次都指定路径。
最烦人的问题是
PS C:\src\python-ivi-master> python .\setup.py install
Traceback (most recent call last):
File "C:\src\python-ivi-master\setup.py", line 11, in <module>
from setuptools.command.test import test as TestCommand
ModuleNotFoundError: No module named 'setuptools'
Run Code Online (Sandbox Code Playgroud)
它找不到模块,例如 setuptools。如果我列出已安装的软件包,则该模块就在那里。
Package Version
----------------- -------
easy-scpi 0.1.2
modbus 3.2
numpy 1.22.3
pandas 1.4.1
pip 22.0.4
pymodbus 2.5.3
pyserial 3.5
python-dateutil 2.8.2
python-ivi 0.14.9
pytz 2021.3
PyVISA 1.11.3
scpi 2.4.0
setuptools 60.10.0 …Run Code Online (Sandbox Code Playgroud) 我正在使用 VS Code 开发一个 python 包,其在 VS Code 中打开的工作区文件夹的布局如下
workspace
| + tests
| | - test1.py
| | + other_tests
| | | - test2.py
| + mymodule
| | ...
Run Code Online (Sandbox Code Playgroud)
我想要的是打电话进来test1.py并带test2.py包裹mymodule
import mymodule
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我总是收到错误no module named 'mymodule'。我知道我可以通过将以下内容插入到所有测试文件来加载路径:
import sys
sys.path.append('<path_to>/workspace/')
Run Code Online (Sandbox Code Playgroud)
然后mymodule就可以正确加载了。(我知道我可以使用pathlib.Path(__file__).parent[n]一些n来获得<path_to>.
但如果你在不同的文件夹中有很多测试文件,这个过程真的很麻烦......而且它很丑陋。
有什么方法可以告诉 VS Code 始终将 包含workspace在路径中吗?
我尝试了一个.env文件
PYTHONPATH=<path_to>/workspace/
Run Code Online (Sandbox Code Playgroud)
我还尝试将以下内容添加到launch.json:
"env": { "PYTHONPATH": "${workspaceFolder}" }
Run Code Online (Sandbox Code Playgroud)
两者都没有达到目的。(我也不确定这是否PYTHONPATH …
我每天都在使用python 2和python 3.我应该添加特定于python版本的PYTHONPATH路径,如下所示,特定于python 2?
/usr/local/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)
如果答案是肯定的,那么python 3会不会使用这些模块?
如果答案是否定的,那么如果不是PYTHONPATH,我应该在哪里添加上述路径?
我正在尝试迁移到py.test以便于使用和自动发现测试.当我使用unittest运行测试时,测试工作正常.当我在py.test下运行测试时,我得到了RuntimeError: working outside of application context.
这是测试代码(test_app.py):
import unittest
from app import app
class TestAPILocally(unittest.TestCase):
def setUp(self):
self.client = app.test_client()
def testRoot(self):
retval = self.client.get('/').data
self.assertTrue('v1' in retval)
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
这是我正在测试的精简文件(app.py):
from flask import Flask
from flask.ext.restful import Api, Resource
class APIListAPI(Resource):
def get(self):
return ['v1']
app = Flask(__name__)
api = Api(app)
api.add_resource(APIListAPI, '/')
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这与烧瓶站点上的文档非常相似:测试骨架,实际上,当我使用unittest运行它时,它成功:
$ python tmp1/test_app.py
.
----------------------------------------------------------------------
Ran 1 test in 0.115s
OK
$
Run Code Online (Sandbox Code Playgroud)
但是,当我用py.test测试时,它失败了:
$ ./py.test tmp1/test_app.py
=================== test …Run Code Online (Sandbox Code Playgroud) pythonpath ×10
python ×9
import ×2
environment ×1
flask ×1
linux ×1
macos ×1
ming ×1
pytest ×1
python-2.7 ×1
python-2.x ×1
setuptools ×1
sys.path ×1
unit-testing ×1
virtualenv ×1
windows-10 ×1
zshrc ×1