brash-area-42337
05/08/2023, 12:35 PMTraceback (most recent call last):
File "/home/kennan/.cache/pants/named_caches/pex_root/venvs/c327cad8531010afb442b743400c471a24792439/dee6656b00a07c8ae98b1c0dfcda4e61ad3e5014/pex", line 236, in <module>
runpy.run_module(module_name, run_name="__main__", alter_sys=True)
File "/usr/lib/python3.9/runpy.py", line 225, in run_module
return _run_module_code(code, init_globals, run_name, mod_spec)
File "/usr/lib/python3.9/runpy.py", line 97, in _run_module_code
_run_code(code, mod_globals, init_globals,
File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/kennan/NPA/fleet-backend/fleetdatabaseFinal/manage.py", line 21, in <module>
main()
File "/home/kennan/NPA/fleet-backend/fleetdatabaseFinal/manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/home/kennan/.cache/pants/named_caches/pex_root/venvs/c327cad8531010afb442b743400c471a24792439/dee6656b00a07c8ae98b1c0dfcda4e61ad3e5014/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/home/kennan/.cache/pants/named_caches/pex_root/venvs/c327cad8531010afb442b743400c471a24792439/dee6656b00a07c8ae98b1c0dfcda4e61ad3e5014/lib/python3.9/site-packages/django/core/management/__init__.py", line 420, in execute
django.setup()
File "/home/kennan/.cache/pants/named_caches/pex_root/venvs/c327cad8531010afb442b743400c471a24792439/dee6656b00a07c8ae98b1c0dfcda4e61ad3e5014/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/kennan/.cache/pants/named_caches/pex_root/venvs/c327cad8531010afb442b743400c471a24792439/dee6656b00a07c8ae98b1c0dfcda4e61ad3e5014/lib/python3.9/site-packages/django/apps/registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "/home/kennan/.cache/pants/named_caches/pex_root/venvs/c327cad8531010afb442b743400c471a24792439/dee6656b00a07c8ae98b1c0dfcda4e61ad3e5014/lib/python3.9/site-packages/django/apps/config.py", line 193, in create
import_module(entry)
File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'rest_framework'
this is my build file at 3rdparty/build
python_requirement(
name="djangorestframework",
requirements=["djangorestframework>=3.12.2"],
modules=["rest_framework"],
)
python_requirement(
name="djangorestframework-simplejwt",
requirements=["djangorestframework-simplejwt>=4.4.0"],
modules=["rest_framework_simplejwt"],
)
python_requirements(
name="reqs",
module_mapping={"djangorestframework": ["rest_framework"],
"djangorestframework-simplejwt": ["rest_framework_simplejwt"]
}
)
curved-television-6568
05/08/2023, 12:40 PMrequirements.txt
file, but for some reason, you don’t have DRF in there, but in dedicated python_requirement
targets.curved-television-6568
05/08/2023, 12:41 PMrequirements.txt
file instead. OR, move the module mapping to their respective targets.brash-area-42337
05/08/2023, 12:45 PMbrash-area-42337
05/08/2023, 12:46 PMpython_requirements(
name="reqs",
module_mapping={"djangorestframework": ["rest_framework"],
"djangorestframework-simplejwt": ["rest_framework_simplejwt"]
}
)
brash-area-42337
05/08/2023, 12:47 PMModuleNotFoundError: No module named 'rest_framework'
curved-television-6568
05/08/2023, 1:07 PMcurved-television-6568
05/08/2023, 1:07 PMbrash-area-42337
05/08/2023, 1:08 PMbrash-area-42337
05/08/2023, 1:08 PMbrash-area-42337
05/08/2023, 1:09 PMcurved-television-6568
05/08/2023, 1:10 PMcurved-television-6568
05/08/2023, 1:10 PMrest_framework
at all in your code?brash-area-42337
05/08/2023, 1:11 PMcurved-television-6568
05/08/2023, 1:11 PMbrash-area-42337
05/08/2023, 1:11 PMbrash-area-42337
05/08/2023, 1:12 PMserialisers.py model
curved-television-6568
05/08/2023, 1:12 PMbrash-area-42337
05/08/2023, 1:13 PMbrash-area-42337
05/08/2023, 1:15 PMcurved-television-6568
05/08/2023, 1:15 PM--keep-sandboxes=on_failure
can be instructive, as it allows you to inspect the execution sandbox used, where you can see which sources where actually used (and that usually helps clarify what is a-miss)curved-television-6568
05/08/2023, 1:15 PMbrash-area-42337
05/08/2023, 1:16 PMcurved-television-6568
05/08/2023, 1:22 PMcurved-television-6568
05/08/2023, 1:24 PMpants paths --from=some/target --to=some/other/target
it will list all dependency links that connects the two. If you get an empty list, it means there is none.curved-television-6568
05/08/2023, 1:24 PMcurved-television-6568
05/08/2023, 1:25 PMcurved-television-6568
05/08/2023, 1:26 PMINSTALLED_APPS
in settings.py
Pants does not recognize this, and while Django will import your app, Pants will not infer a dependency to it.brash-area-42337
05/08/2023, 1:26 PMfast-nail-55400
05/08/2023, 1:28 PMdependencies
field in which you can add explicit dependencies.curved-television-6568
05/08/2023, 1:28 PMtarget(
name="all_apps",
dependencies=[
"src/app1",
"src/app2",
...
]
)
pex_binary(..., dependencies=[":all_apps"])
adapt as needded.curved-television-6568
05/08/2023, 1:29 PMfast-nail-55400
05/08/2023, 1:30 PMcurved-television-6568
05/08/2023, 1:30 PMpants peek some/target
which will show you what pants think of a targetbrash-area-42337
05/08/2023, 1:35 PMpex_binary
??curved-television-6568
05/08/2023, 1:42 PMcurved-television-6568
05/08/2023, 1:43 PMmanage.py
for instance, I prefer to make that file depend on all the apps and stuff it requires to run, rather than the encapsulating pex, if you see what I’m getting at.brash-area-42337
05/08/2023, 1:44 PMpython_sources(
overrides={
"manage.py":{
"run_goal_use_sandbox":False,
#"restartable":True,
},
},
)
pex_binary(
name="django-admin",
dependencies=[
"3rdparty:reqs#Django",
],
script="django-admin",
)
pex_binary(
name="manage",
entry_point="manage.py",
dependencies=[
"fleetdatabaseFinal:fleetdatabaseFinal",
"accounts:accounts",
"3rdparty:reqs#psycopg2-binary",
"3rdparty:reqs#gunicorn",
],
restartable=True,
inherit_path="prefer",
)
pex_binary(
name="production",
dependencies=[
"fleetdatabaseFinal:fleetdatabaseFinal",
"accounts:accounts",
"3rdparty:reqs#psycopg2-binary",
"3rdparty:reqs#gunicorn",
"3rdparty:reqs#python-dotenv",
],
script="gunicorn",
restartable=True,
inherit_path="prefer",
)
brash-area-42337
05/08/2023, 1:44 PMcurved-television-6568
05/08/2023, 1:46 PMtarget
target where you can list all “arbitrary” deps you need, and then have only a single target to add to as few places as possible, 3 in this case might be OK.curved-television-6568
05/08/2023, 1:51 PMpython_sources(
name="manage",
sources=["manage.py"],
dependencies=[
"src/python/exampleinc/app:all_apps",
"src/python/exampleinc/app:bootstrap",
],
)
pex_binary(
name="app",
entry_point="manage.py",
dependencies=[
# TEMP solution until django plugins are inferred/registered properly
"!!3rdparty/python#django-axes@resolve=python-default",
"!!3rdparty/python#django-ipware@resolve=python-default",
"!!3rdparty/python#PyJWT@resolve=python-default",
],
)
pex_binary(
name="testing",
entry_point="manage.py:testing",
dependencies=[
"src/python/exampleinc/app/test_app",
],
)
target(
name="bootstrap",
dependencies=[
"src/python/exampleinc/app/app:app",
"src/python/exampleinc/app/locale:locale",
"src/python/exampleinc/app/production/management/commands:commands",
"src/python/exampleinc/app:all_apps",
"src/python/exampleinc/app:all_migrations",
"src/python/exampleinc/app:all_urls",
],
)
target(
name="all_urls",
dependencies=[
"src/python/exampleinc/app/core/urls:urls",
"src/python/exampleinc/app/dms:dms",
"src/python/exampleinc/app/dms/urls:urls",
"src/python/exampleinc/app/files/urls:urls",
"src/python/exampleinc/app/oauth:oauth",
"src/python/exampleinc/app/reports:reports",
],
)
target(
name="all_migrations",
dependencies=[
"src/python/exampleinc/app/dms/migrations:migrations",
"src/python/exampleinc/app/files/migrations:migrations",
"src/python/exampleinc/app/reports/migrations:migrations",
],
)
target(
name="all_apps",
dependencies=[
"src/python/exampleinc/app/core:core",
"src/python/exampleinc/app/dms:dms",
"src/python/exampleinc/app/files:files",
"src/python/exampleinc/app/oauth:oauth",
"src/python/exampleinc/app/reports:reports",
],
)
python_test_utils(
name="conftest",
sources=["conftest.py"],
dependencies=[
"src/python/exampleinc/app/test_app",
"src/python/exampleinc/app/app/pytest_settings.py",
],
)
not saying this is an ideal setup, but should at least give you some inspirationcurved-television-6568
05/08/2023, 1:52 PMcurved-television-6568
05/08/2023, 1:53 PMbrash-area-42337
05/08/2023, 3:05 PMbrash-area-42337
05/08/2023, 3:12 PMbrash-area-42337
05/08/2023, 3:13 PMcurved-television-6568
05/08/2023, 3:21 PMpython_requirements(
module_mapping={
"aws-sam-translator": ("samtranslator",),
"celery-redbeat": ("redbeat",),
"cfn-lint": ("cfnlint",),
"django-axes": ("axes",),
"django-ipware": ("ipware",),
"django-jsoneditor": ("jsoneditor",),
"django-storages": ("storages",),
"djangorestframework-jwt": ("rest_framework_jwt",),
"future": ("libfuturize", "libpasteurize", "past"),
"google-auth": ("google.auth",),
"google-pasta": ("pasta",),
"jpype1": ("jpype",),
"libclang": ("clang",),
"ndg-httpsclient": ("ndg",),
"pdfminer.six": ("pdfminer",),
"psycopg2": [
"psycopg2",
# This is for dependency inference only, when we see an import for
# `django.contrib.postgres` we should infer a dependency on `psycopg2`.
"django.contrib.postgres",
],
"pycryptodome": ("Crypto",),
"pyrsistent": ("pvectorc",),
"pyscss": ("scss",),
"python3-saml": ("onelogin",),
"websocket-client": ("websocket",),
},
overrides={
(
"aws-xray-sdk",
"django-axes",
): {
"dependencies": ("#setuptools",),
},
"django": {
"dependencies": (
# Make sure all django plugins and dependencies are listed here, any app specific
# exceptions to this list is handled as exclude where applicable, as a temporary
# workaround until we have a better solution for inferring/registering django
# magics.
"#django-axes", # auth only
"#django-cors-headers",
"#django-extensions",
"#django-filter", # not auth
"#django-fsm", # not auth
"#django-ipware", # auth only
"#django-jsoneditor", # not auth
"#django-redis", # obsolete in Django4
"#django-ses",
"#django-storages",
"#psycopg2",
),
},
"fakeredis": {
"dependencies": ("#sortedcontainers",),
},
},
)
brash-area-42337
05/08/2023, 3:27 PMbrash-area-42337
05/08/2023, 3:31 PMcurved-television-6568
05/08/2023, 4:41 PMcurved-television-6568
05/08/2023, 4:42 PMbrash-area-42337
05/09/2023, 7:54 AMcurved-television-6568
05/09/2023, 11:31 AMpython_requirements(
module_mapping={
...
},
overrides={
...
},
)
curved-television-6568
05/09/2023, 11:32 AMrequirements.txt
file backing the target informing it which requirements we want here.brash-area-42337
05/09/2023, 11:34 AMbrash-area-42337
05/09/2023, 11:38 AMcurved-television-6568
05/09/2023, 12:05 PMcurved-television-6568
05/09/2023, 12:06 PMsource
field for python_requirements
should pick up your requirements.txt file, so it is most convenient to have it in the same directory as that file.brash-area-42337
05/09/2023, 12:52 PM15:38:12.52 [ERROR] 1 Exception encountered:
ResolveError: The address 3rdparty:3rdparty from the `AllTargets` rule does not exist.
The target name ':3rdparty' is not defined in the directory 3rdparty. Did you mean one of these target names?
* :reqs
brash-area-42337
05/09/2023, 12:54 PM3rdparty
, I only have a dependency directory named thatbrash-area-42337
05/09/2023, 1:39 PMpython_requirements(
name="reqs",
module_mapping={
"djangorestframework": ("rest_framework",),
"djangorestframework-simplejwt": ("rest_framework_simplejwt",)
},
overrides={
"django": {
"dependencies":(
"#djangorestframework",
"#djangorestframework-simplejwt",
)
}
}
)
fast-nail-55400
05/09/2023, 4:36 PM3rdparty/BUILD
?brash-area-42337
05/10/2023, 6:14 AMfast-nail-55400
05/10/2023, 6:48 AMfast-nail-55400
05/10/2023, 6:49 AM3rdparty:reqs
. If the reference was just 3rdparty
, then Pants will assume the target's name is the same as the directory and the address becomes 3rdparty:3rdparty
)fast-nail-55400
05/10/2023, 6:49 AMThe target name ':3rdparty' is not defined in the directory 3rdparty.
fast-nail-55400
05/10/2023, 6:50 AMreq
and not 3rdparty
brash-area-42337
05/10/2023, 6:52 AMbrash-area-42337
05/10/2023, 6:58 AMpython_sources(
overrides={
"manage.py":{
"run_goal_use_sandbox":False,
#"restartable":True,
},
},
)
pex_binary(
name="django-admin",
dependencies=[
"3rdparty:reqs#Django",
],
script="django-admin",
)
pex_binary(
name="manage",
entry_point="manage.py",
dependencies=[
"fleetdatabaseFinal:fleetdatabaseFinal",
"accounts:accounts",
"3rdparty:reqs#psycopg2-binary",
"3rdparty:reqs#gunicorn",
"3rdparty:reqs#djangorestframework",
"3rdparty:reqs#djangorestframework-simplejwt",
],
restartable=True,
inherit_path="prefer",
)
brash-area-42337
05/10/2023, 7:16 AMfast-nail-55400
05/10/2023, 11:57 AMname
, then Pants will use the name of the directory as the target's name. As you might guess, only one target in a directory can have name
omitted.
• For a target's address (i.e., a reference to the target), if you omit the NAME
component from the address path/to/directory/with/a/build/file:NAME
, then Pants will assume that NAME
is the name of the directory. (More specifically, the last path component of the path. So a reference to src/python/foo/bar
is equivalent to src/python/foo/bar:bar
fast-nail-55400
05/10/2023, 11:58 AMbrash-area-42337
05/10/2023, 12:00 PMreqs
but it seems pants doesn't read itbrash-area-42337
05/10/2023, 12:20 PM"3rdparty:reqs#djangorestframework",
brash-area-42337
05/10/2023, 12:21 PMbrash-area-42337
05/10/2023, 3:26 PMhappy-kitchen-89482
05/10/2023, 3:30 PMbrash-area-42337
05/11/2023, 11:55 AMbrash-area-42337
05/11/2023, 12:09 PM./pants run fleetdatabaseFinal:manage -- makemigrations accounts
brash-area-42337
05/11/2023, 12:09 PM./pants run fleetdatabaseFinal:manage -- runserver --noreload
brash-area-42337
05/11/2023, 1:23 PMhappy-kitchen-89482
05/11/2023, 3:40 PM./pants
script any more, you can just run the pants
launcher binary (see here for how to install it).happy-kitchen-89482
05/11/2023, 6:07 PMpants run fleetdatabaseFinal:manage -- makemigrations accounts
does not run migrations, it creates migration files by comparing changes to your models to the existing migrations, and then you check those resulting migrations files in.happy-kitchen-89482
05/11/2023, 6:08 PMpants run fleetdatabaseFinal:manage -- runserver --noreload
fails for me because I don't have a database running...brash-area-42337
05/12/2023, 6:13 AMhappy-kitchen-89482
05/13/2023, 5:10 PMhappy-kitchen-89482
05/13/2023, 5:10 PMmanage.py migrate
happy-kitchen-89482
05/13/2023, 5:12 PMhappy-kitchen-89482
05/13/2023, 5:12 PMbrash-area-42337
05/13/2023, 5:16 PMrest_framework
and rest_framework
brash-area-42337
05/13/2023, 5:18 PMrest_framework_simplejwt
happy-kitchen-89482
05/13/2023, 5:18 PMhappy-kitchen-89482
05/13/2023, 5:18 PM$ waldorf:[~/src/Open-fleet-backend][main]$ pants paths --from=fleetdatabaseFinal:manage --to=3rdparty:reqs#djangorestframework
[
[
"fleetdatabaseFinal:manage",
"3rdparty:reqs#djangorestframework"
],
[
"fleetdatabaseFinal:manage",
"accounts/serializers.py",
"3rdparty:reqs#djangorestframework"
]
]
happy-kitchen-89482
05/13/2023, 5:19 PMhappy-kitchen-89482
05/13/2023, 5:19 PMbrash-area-42337
05/13/2023, 5:25 PM20:23:43.43 [ERROR] 1 Exception encountered:
ResolveError: The address 3rdparty:3rdparty from the `dependencies` field of the target 3rdparty:reqs#Django does not exist.
The target name ':3rdparty' is not defined in the directory 3rdparty. Did you mean one of these target names?
* :reqs
brash-area-42337
05/13/2023, 5:25 PMbrash-area-42337
05/13/2023, 5:28 PMpython_requirements(
name="reqs",
module_mapping={
"djangorestframework": ("rest_framework",),
"djangorestframework-simplejwt": ("rest_framework_simplejwt",)
},
overrides={
"django": {
"dependencies":(
"#djangorestframework",
"#djangorestframework-simplejwt",
)
}
}
)
happy-kitchen-89482
05/13/2023, 5:28 PMhappy-kitchen-89482
05/13/2023, 5:29 PMbrash-area-42337
05/13/2023, 5:30 PMpants paths --from=fleetdatabaseFinal:manage --to=3rdparty:reqs#djangorestframework
happy-kitchen-89482
05/13/2023, 5:30 PMhappy-kitchen-89482
05/13/2023, 5:30 PMhappy-kitchen-89482
05/13/2023, 5:30 PMpants paths --from=fleetdatabaseFinal:manage --to=3rdparty:reqs#djangorestframework
works for me in your repohappy-kitchen-89482
05/13/2023, 5:31 PMhappy-kitchen-89482
05/13/2023, 5:31 PMhappy-kitchen-89482
05/13/2023, 5:32 PMhappy-kitchen-89482
05/13/2023, 5:32 PMbrash-area-42337
05/13/2023, 5:37 PM<https://github.com/132kibsdanger/Open-fleetbackend.git>
brash-area-42337
05/13/2023, 5:38 PMbrash-area-42337
05/13/2023, 11:50 PMhappy-kitchen-89482
05/14/2023, 3:29 PMbrash-area-42337
05/14/2023, 3:30 PMpants paths --from=fleetdatabaseFinal:manage --to=3rdparty:reqs#djangorestframework
was giving me the errorbrash-area-42337
05/14/2023, 3:31 PM20:23:43.43 [ERROR] 1 Exception encountered:
ResolveError: The address 3rdparty:3rdparty from the `dependencies` field of the target 3rdparty:reqs#Django does not exist.
The target name ':3rdparty' is not defined in the directory 3rdparty. Did you mean one of these target names?
* :reqs
brash-area-42337
05/14/2023, 3:31 PMhappy-kitchen-89482
05/14/2023, 3:33 PMhappy-kitchen-89482
05/14/2023, 3:33 PMoverrides={
"django": {
"dependencies":(
":reqs#djangorestframework",
":reqs#djangorestframework-simplejwt",
)
}
}
happy-kitchen-89482
05/14/2023, 3:34 PM"#djangorestframework"
it assumes that this belongs to a target with the same name as the directory, but you don't have such a target. Your target's name is reqs
, so the dep should be written ":reqs#djangorestframework"
brash-area-42337
05/14/2023, 3:35 PMbrash-area-42337
05/14/2023, 3:40 PMModuleNotFoundError: No module named 'rest_framework_simplejwt
brash-area-42337
05/14/2023, 3:43 PM./pants run fleetdatabaseFinal:manage -- runserver --noreload
brash-area-42337
05/14/2023, 4:49 PMhappy-kitchen-89482
05/14/2023, 4:57 PMhappy-kitchen-89482
05/14/2023, 4:57 PMModuleNotFoundError: No module named 'rest_framework_simplejwt '
happy-kitchen-89482
05/14/2023, 4:57 PMhappy-kitchen-89482
05/14/2023, 4:58 PMhappy-kitchen-89482
05/14/2023, 4:59 PMbrash-area-42337
05/14/2023, 5:03 PMhappy-kitchen-89482
05/14/2023, 7:03 PMpolite-art-93959
08/06/2023, 5:14 PM